objdump 和 xxd 的区别

Differences between objdump and xxd

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

  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.

可以吗?

那是 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 个为一组,并将它们解释为小端。

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

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