objdump 和 xxd 的区别
Differences between objdump and xxd
我试图在二进制文件中找到一个调用函数,所以我尝试了这个:
- 编译我的代码(在 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
.
可以吗?
那是 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 个为一组,并将它们解释为小端。
xxd
可以按小端顺序打印,使用 -e
标志(默认分组为 4 个字节,使用 -g
标志更改每个字节数团体)。但是,这与 -p
标志不兼容,因为 -p
标志忽略任何分组。
objdump
可以使用 -EB
标志以大端顺序打印,但是,这会影响它报告的指令。
我试图在二进制文件中找到一个调用函数,所以我尝试了这个:
- 编译我的代码(在 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
.
可以吗?
那是 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 个为一组,并将它们解释为小端。
xxd
可以按小端顺序打印,使用 -e
标志(默认分组为 4 个字节,使用 -g
标志更改每个字节数团体)。但是,这与 -p
标志不兼容,因为 -p
标志忽略任何分组。
objdump
可以使用 -EB
标志以大端顺序打印,但是,这会影响它报告的指令。