寄存器(Registers)

寄存器是用户区域的一部分,存储于上下文(context)结构中,被调度器所使用。可以通过操纵该结构对寄存器数值进行获取和修改,例如,在Intel主机上,可以通过直接操作DR0-DR7硬件寄存器设置硬件断点。

radare2提供了用于获取寄存器信息的不同命令,一个通用的命令如下:

[0x4A13B8C0]> dr
r15 = 0x00000000
r14 = 0x00000000
r13 = 0x00000000
r12 = 0x00000000
rbp = 0x00000000
rbx = 0x00000000
r11 = 0x00000000
r10 = 0x00000000
r9 = 0x00000000
r8 = 0x00000000
rax = 0x00000000
rcx = 0x00000000
rdx = 0x00000000
rsi = 0x00000000
rdi = 0x00000000
oeax = 0x0000003b
rip = 0x7f20bf5df630
rsp = 0x7fff515923c0

[0x7f0f2dbae630]> dr rip ; get value of 'rip'
0x7f0f2dbae630

[0x4A13B8C0]> dr rip = esp   ; set 'rip' as esp

插件和r2内核之间的交互是通过返回radare指令的命令完成的。例如,下面的命令用于设置r2内核中的标志以设置寄存器的值:

寄存器的历史信息始终存储着,以跟踪分析程序在执行中的变化,可以哟你oregs访问历史信息。

Current state of registers

eax,oeax和eip中存储的值都已改变。

要存储和恢复寄存器值,只需将dr*命令的输出转储到磁盘,然后再次重新载入它:

可以很容易地修改EFLAGS寄存器,例如,设置寄存器里的flag:

若使用drd命令(diff registers)可以以字符串形式获取寄存器最近一次的变化:

最后更新于