记录一下计老师如何将ELF文件转成汇编

以下内容是Makefile文件内容。

#指定使用的是哪个链接脚本
LED_LDS = -Tled.lds



ledc.bin:start.S ledc.c
	arm-none-linux-gnuebi-gcc -c -o start.o start.S	# 生成目录文件
	arm-none-linux-gnuebi-gcc -c -o ledc.o ledc.c	# 生成目录文件

	#使用链接脚本将目标文件链接成ELF可执行文件。若不使用链接脚本时,连接顺序为目录文件书写的顺序
	#-Ttext 0x40008000 指定.text段的起始地址
	arm-none-linux-gnuebi-ld  $(LED_LDS) -Ttext 0x40008000 ledc.o start.o -o ledc_elf

	#使用objcopy将ELF文件的头部信息去除,然后生成ledc.bin二进制文件
	arm-none-linux-gnuebi-objcopy -O binary -S ledc_elf ledc.bin

	#使用objdump将LEF文件ledc_elf进行反汇编,生成反汇编文件ledc.dis
	arm-none-linux-gnuebi-objdump -D ledc_elf > ledc.dis

clean:
	rm -f *.o    *.dis     ledc_elf     *.bin
	

以下内容是链接脚本的内容。


OUTPUT_ARCH(arm)		    #输出格式为ARM架构
ENTRY(_start)		        #指定首先执行的函数的入口地址
SECTIONS			        #目录文件各个段的排布情况
{
	. = 0x40008000;	        #指定.text段的起始地址
	.tex : 
    {
		start.o (.text)
		ledc.o (.text)
		* (.text)
	}

	.rodata : 
    {
		* (.rodata)
	}

	.data : 			    #已经初始化的全局变量
    {
		* (.data)
	}

	.bss :                  #程序中未初始化的全局变量,在系统启动时全部清0
    {				
		__bss_start = . ;	#定义一个全局符号,保存.bss的启始地址
		* (.bss)
		__bss_end = . ;		#定义一个全局符号,保存.bss段的结束地址,
					        #__bss_start ,__bss_end 用于在系统启时指定要清0的地址区域
	}
}

你可能感兴趣的:(linux学习)