使用radare2从内存地址获取函数

逆向工程 雷达2
2021-07-05 09:33:36

假设我有一个内存地址。该地址指向一条指令。该指令位于函数内部。

给定指令的内存地址,有没有办法让radare2搜索这个函数的开头?

2个回答

是的,你可以做到。

如果您在给定的内存地址上被搜索​​,您可以获得当前使用的函数:

afi.

现在,如果你想寻找函数的开头,你可以使用:

s `afi.`

如果您只想获取函数开头的地址但不想查找它,只需使用临时修饰符@

s @ `afi.`

这将返回函数所在的内存地址。

当然,您可以在任何内存地址上获取该信息,而无需再次使用@修饰符来查找

s @ `afi. @ 0x????????`

哪里 0x???????是您想知道它所在的函数从哪里开始的任何内存地址。例如,这种方法在使用 r2pipe 编写脚本时非常有用。

PS:反引号用于获取它们之间的命令输出作为输入。

您需要使用s addr命令访问地址,但之后,您只需使用速记即可转到您所在函数的开头。

只需输入:sf.即可开始。

如果需要,只需参考帮助:

> s?
Usage: s    # Help for the seek commands. See ?$? to see all variables

| s addr            Seek to address
...
| sf.               Seek to the beginning of current function
...

您还可以将这两个命令与;

s 0x100001238; sf.