【问题标题】:Differences between objdump and xxdobjdump 和 xxd 的区别
【发布时间】:2016-12-19 17:25:03
【问题描述】:
我正在尝试在二进制文件中查找调用函数,所以我尝试了这个:
- 编译我的代码(用 C 语言),
- 使用命令:
mips-mti-linux-gnu-objdump -d myapp.elf> objdump.txt
- 我在 objdump.txt 文件中的函数:
9d003350: 42000828 myfunction 0x1
现在,我想在从内存中读取此函数时在 myapp.bin 中识别此函数。但是,我明白了:28080042。
我尝试使用命令:xxd -ps myapp.bin> xxd.txt
随便找:28080042.
有可能吗?
【问题讨论】:
标签:
linux
endianness
objdump
xxd
【解决方案1】:
这是endianness 冲突。 objdump 和 xxd 给你相同的字节,他们只是使用不同的字节序。
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 标志以大端顺序打印,但是,这会影响它报告的指令。