在radare2中寻找存储在内存中的值

逆向工程 雷达2
2021-06-25 23:13:10

使用radare2,我正在逆向工程自定义语言解释器。它将编译后的函数存储为指向语言原语的指针列表。我想去seek这些位置,但输入十六进制地址非常令人沮丧。我似乎找不到任何用于说“查找存储在当前位置的地址”的语法。

例如,假设我在视觉模式下查看以下内容:

; UNKNOWN XREFS from entry0 @ 0x400382, 0x400384
; UNKNOWN XREF from entry0 @ +0x82
;-- section..text:
0x004000b0      .qword 0x00000000004002f3 ; aav.0x004002f3    ; [01] -r-x section size 736 named .text
0x004000b8      .qword 0x0000000000000064
0x004000c0      .qword 0x0000000000400301 ; aav.0x00400301
0x004000c8      .qword 0x000000000040032e ; aav.0x0040032e
0x004000d0      .qword 0x000000000040030c ; aav.0x0040030c
. . .

“当前位置”在0x004000b0,它存储值0x4002f3,这是我想要寻找的位置。现在,我必须先输入,g然后阅读和输入,或者选择并粘贴地址0x4002f3

有没有什么有效的方法可以说“寻找存储在$$的值

1个回答

可以使用 * 符号读取指针值
$$ 是当前虚拟查找的别名
因此 *$$ 将返回存储在当前查找中的值

您可以执行命令并将结果传递给seek

s `*$$`

一个简单的例子,展示了如何从当前搜索到存储在第 3 个 DWORD 中的地址

[0x01012d6c]> sentry0
[0x01012d6c]> x/4xw
0x01012d6c  0xfffd4be8 0x68586aff 0x01012ee8 0xff99ebe8  .K...jXh........
[0x01012d6c]> s `*$$+8`
[0x01012ee8]>