0

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

  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 Just can find: 28080042

有可能这样做吗?

4

1 回答 1

2

这是一个字节顺序冲突。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,但是,这将影响它报告的指令。

于 2016-12-19T18:45:03.007 回答