gdb中

时间:2017-05-16 09:13:36

标签: assembly scripting gdb

我正在转储寄存器内容,逐条指令,使用gdb脚本(这不是交互式调试会话,layout asm或TUI模式不在图片中。)

我想在寄存器值中添加与当前指令对应的机器代码。我已经找到了一个技巧来克服这样一个事实:disassemble命令旨在为你提供围绕当前指令的大量上下文,并且我不知道应该反汇编多少字节来获得完整的指令。无论指令大小如何,1的范围都可以解决这个问题:

(gdb) disassemble $pc,$pc+1
Dump of assembler code from 0x400efe to 0x400eff:
=> 0x0000000000400efe <main+0>: push   %r15
End of assembler dump.

我必须更进一步,添加一个标志来显示我真正想要的东西(41 57):

(gdb) disassemble /r $pc,$pc+1
Dump of assembler code from 0x400efe to 0x400eff:
=> 0x0000000000400efe <main+0>: 41 57   push   %r15
End of assembler dump.

还有另一种显示此信息的方法:

(gdb) x/i $pc
=> 0x400efe <main>: push   %r15
(gdb) x/x $pc
0x400efe <main>:    0x56415741

但我找不到一个格式说明符,可以让我专门提取41 57(我可以使用5741)。正如您所看到的,面向指令的指令在不显示机器代码的情况下反汇编,而hexdump不知道指令长度。

最后,我需要这个值以printf结尾,这意味着根据我得到的当前输出,仍然需要一些解析。我不确定这在纯gdb脚本中是否可行。

如果可能的话,我宁愿避免依赖gdb python图层。

你知道有什么方法可以实现我想做的事吗?

0 个答案:

没有答案