用mips编译器出elf文件之后,由readelf objdump等命令 可以分析elf文件
bootldr_elf: $(AS_MIPS) -o boot.o boot.asm $(GCC_MIPS) bootldr.c $(GCC_MIPS) no_os.c $(GCC_MIPS) -DDLL_DISABLE ddr_init.c $(LD_MIPS) -Ttext 0 -eentry -Map test.map -s -N -o test.axf \ boot.o bootldr.o no_os.o ddr_init.o @$(DUMP_MIPS) --disassemble test.axf > test.lst $(CONVERT_BIN) readelf -S test.axf @$(DUMP_MIPS) -h test.axf #http://www.groad.net/bbs/read.php?tid-1381-page-e.html
以上为elf信息汇总。
用对比工具araxis merge比较elf文件和bin文件得到:
为什么会有这么多零散的地方不一样? 需要研究converter.c
不同之一:
但是作为bootldr elf部分信息是没用的 ,比如elf的头信息
不同之二:
对test.elf objdump 得到的text section得到:(objdump --disassemble test.axf > test.lst 也可以 objdump -j .text -m mips -S test.axf>bootldrtext.txt )
这个0082 1021是text段结束的地方,也正是 二进制对比软件显示的difference之一
不同之三:
对数据段与bin对比得到(用objdump -j .data -m mips -S test.axf>bootldrdata.txt)
Objdump 使用详解: http://wenku.baidu.com/view/54a8b588d0d233d4b14e6939.html
------------------------------------------------------------------------------------------------------------------
objdump -D 显示全部反汇编信息
用objdump -D -m mips -S test.axf>bootldrall.txt
反汇编的是elf, 理论上准换之后的bin文件除了header信息部分,不应该有不一样。为什么工具比较出来的不一样呢?!
因为 工具有错误!
认真比较对比bootldrall.txt和test.bin 可知:
不一样的地方一共有两处;
第一:elf多出了header信息,这在bin中不需要
第二:rodata和data的绝对地址是不能变的,所以 rodata之前要加0,保证rodata地址与data地址 与含header信息的elf相同
其他位置没有,也不应该有不同的信息!