我有一个二进制文件,已在gdb中将其反汇编为可见的程序集。但是,我想查看每条指令的实际二进制文件(即以实际发出给CPU的任何指令格式的实际指令)。有没有办法输入指令的地址并以二进制形式查看该指令?
无论什么地址,我都尝试使用p / t 0x --------,但是它将地址本身解码为二进制。 我尝试了相同的操作,但是使用$ 0x --------,这产生了“无法将值转换为整数”错误。
我希望能够在gdb看到的二进制地址中以给定的地址(例如0x00000300)看到lwi或ori等指令。
答案 0 :(得分:0)
您正在寻找disassemble/r 0x...
。
来自manual:
print the raw instructions in hex as well as in symbolic
form by specifying the /r modifier.
更新:
我可以在布局asm中看到从我的二进制文件中获得的汇编指令。但是单独运行反汇编命令使我看不到任何内容,因为它显示“没有函数包含指定的地址”。
因此您的二进制文件被剥离(或者至少GDB不知道最近的函数在哪里)。
解决方案是仅分解您感兴趣的指令。例如:
(gdb) disas 0x0000555555556d60
No function contains specified address.
(gdb) disas 0x0000555555556d60,+1
Dump of assembler code from 0x555555556d60 to 0x555555556d61:
0x0000555555556d60: mov %edi,%eax
End of assembler dump.
(gdb) disas/r 0x0000555555556d60,+1
Dump of assembler code from 0x555555556d60 to 0x555555556d61:
0x0000555555556d60: 89 f8 mov %edi,%eax
End of assembler dump.
答案 1 :(得分:0)
我找到了解决方案,那就是编写以下命令:
p / x * [十六进制地址]
例如:
p / x * 0x00000300