如何让Radare2在每个`ds`调试单步后自动反汇编下一条指令?

逆向工程 调试 雷达2
2021-06-15 23:43:39

如何让Radare2在每次ds调试单步后自动反汇编下一条指令

我认为这e asm.bytes=1会实现这一目标,但这无济于事。

特别是,GDB 支持在每个调试单步之后反汇编下一条指令,所以我想这应该也可以用 Radare2 实现。

1个回答

如果你想在完成后执行另一个命令,ds你可以简单地使用;添加一个新命令。因此,例如,该命令ds; pd 1 @ rip将执行一条指令并在 处反汇编该指令rip

您还可以为一组命令定义一个宏(别名)。例如,让我们定义宏foo来执行以下操作:

  1. 一小步
  2. 打印 16 字节的 hexdump at rip
  3. 反汇编 1 条指令 rip

为此,您只需运行:

[0x7f46fea5ee00]> (foo, ds, px 16 @ rip, pd 1 @ rip)

然后使用它.(foo)

[0x7f46fea5ee00]> .(foo)
- offset -       0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x7f46fea5ee1a  89c0 48c1 e220 4809 c248 8b05 0e70 0200  ..H.. H..H...p..
            ;-- rip:
            0x7f46fea5ee1a      89c0           mov eax, eax

[0x7f46fea5ee00]> .(foo)
- offset -       0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x7f46fea5ee1c  48c1 e220 4809 c248 8b05 0e70 0200 4889  H.. H..H...p..H.
            ;-- rip:
            0x7f46fea5ee1c      48c1e220       shl rdx, 0x20

[0x7f46fea5ee00]> .(foo)
- offset -       0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x7f46fea5ee20  4809 c248 8b05 0e70 0200 4889 156f 6802  H..H...p..H..oh.
            ;-- rip:
            0x7f46fea5ee20      4809c2         or rdx, rax

视觉模式

现在,毕竟这是说,我想补充一点,在我看来,交互式调试使用dsdsodc和类似的是错误的做法。对于调试会话,最好使用radare2 的可视模式。Visual Panels 模式非常适合调试会话,但您也可以在使用常规 Visual 和 Visual Graph 模式时享受良好的体验。

以下 GIF 显示了可视化面板模式 ( V!) 以及常规可视化模式。您还可以看到按:I 可以执行radare2 命令(在我执行的gif 中px)。可视面板模式是非常可配置的,您可以根据需要对其进行调整。只需使用该?键即可查看帮助和可用命令。

在此处输入图片说明


阅读更多: