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

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

  • 相关阅读:
    KafKa 发消息到Storm
    HBase的优化
    HBase部署与使用
    Scala 类
    Scala高阶函数
    模式匹配
    Scala数据结构
    scala基础语法
    Scala安装配置
    Kafka工作流程分析
  • 原文地址:https://www.cnblogs.com/mipscpu/p/2962192.html
Copyright © 2011-2022 走看看