【问题标题】:Differences between objdump and xxdobjdump 和 xxd 的区别
【发布时间】:2016-12-19 17:25:03
【问题描述】:

我正在尝试在二进制文件中查找调用函数,所以我尝试了这个:

  1. 编译我的代码(用 C 语言),
  2. 使用命令:mips-mti-linux-gnu-objdump -d myapp.elf> objdump.txt
  3. 我在 objdump.txt 文件中的函数:9d003350: 42000828 myfunction 0x1

现在,我想在从内存中读取此函数时在 myapp.bin 中识别此函数。但是,我明白了:28080042

我尝试使用命令:xxd -ps myapp.bin> xxd.txt 随便找:28080042.

有可能吗?

【问题讨论】:

    标签: linux endianness objdump xxd


    【解决方案1】:

    这是endianness 冲突。 objdumpxxd 给你相同的字节,他们只是使用不同的字节序。

    Actual bytes in order:
        28 08 00 42
    Big endian value:
        28 08 00 42
    Little endian value:
        42 00 08 28
    

    xxd -p 将按照它们存在的顺序打印出文件中的各个字节。

    objdump 正在反汇编它,它知道字节属于 4 个一组,并将它们解释为 little-endian。

    xxd 可以使用 -e 标志以小端顺序打印(默认分组为 4 个字节,使用 -g 标志更改每组的字节数)。但是,这与-p 标志不兼容,因为-p 标志会忽略任何分组。

    objdump 可以使用-EB 标志以大端顺序打印,但是,这会影响它报告的指令。

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 2012-07-16
      • 1970-01-01
      • 2011-03-27
      • 2016-06-02
      • 1970-01-01
      • 2013-08-07
      • 2011-10-20
      • 2020-01-23
      相关资源
      最近更新 更多