ELF与BIN文件比较

用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相同

 

 其他位置没有,也不应该有不同的信息!

posted @ 2013-03-15 21:18  mipscpu  阅读(1048)  评论(0编辑  收藏  举报