假设我有一个内存地址。该地址指向一条指令。该指令位于函数内部。
给定指令的内存地址,有没有办法让radare2搜索这个函数的开头?
假设我有一个内存地址。该地址指向一条指令。该指令位于函数内部。
给定指令的内存地址,有没有办法让radare2搜索这个函数的开头?
是的,你可以做到。
如果您在给定的内存地址上被搜索,您可以获得当前使用的函数:
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.