zoukankan      html  css  js  c++  java
  • 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相同

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

  • 相关阅读:
    Pymongo
    asp.net mvc4 使用java异步提交form表单时出现[object object] has no method ajaxSubmit
    C# Activator.CreateInstance()
    GridView中某一列值的总和(web)
    02.[WPF]如何固定窗口的大小
    01.WPF中制作无边框窗体
    C#.net时间戳转换
    org.springframework.beans.factory.BeanCreationException: 求教育!
    log4Net配置详解
    SQL语句-创建索引
  • 原文地址:https://www.cnblogs.com/mipscpu/p/2962192.html
Copyright © 2011-2022 走看看