尽管radare2 提供了大量的命令来处理寄存器(请参阅参考资料dr?),但以十进制模式查看寄存器的值是相当棘手的。也就是说,我将向您展示两种简单的方法(命令),您可以选择它们来实现您的目标。
我们将通过执行你提到的命令,以改变的值开始rax和rdx:
[0x7f49250e4e06]> dr rax = 298
0x00000000 ->0x0000012a
[0x7f49250e4e06]> dr rdx = 42
0x00000000 ->0x0000002a
[0x7f49250e4e06]>
1. 只打印一个寄存器
这是更优雅的解决方案。从您问题的第一部分,我了解到您想以十进制模式打印所有寄存器,但最后您只引用rax和rdx。如果是这种情况,以下命令可以在十进制模式下显示特定寄存器的值:
[0x7f49250e4e06]> ?vi rax
298
[0x7f49250e4e06]> ?vi rdx
42
我使用的命令是?vi并且是?. 该命令?及其子命令负责计算数学表达式。通过执行???你可以获得它的帮助。的帮助说明?vi是:
[0x7f49250e4e06]> ???
...
| ?vi rsp-rbp show decimal value of math expr
...
2. 将所有寄存器打印为 json
与第一种解决方案不同,该解决方案不太优雅,但会显示所有寄存器。在下面的解决方案中,我们将利用这样一个事实,即通过附加j到命令,radare 可以为几乎每个命令提供 JSON 格式的输出。是的,这包括用于显示寄存器的命令。我们还将利用 JSON 输出的数值通常是十进制这一事实。
[0x7f49250e4e06]> drj~{}
{
"rax": 298,
"rbx": 139952134190912,
"rcx": 2,
"rdx": 42,
"r8": 231,
"r9": 18446744073709551488,
"r10": 2,
"r11": 2,
"r12": 139952134190912,
"r13": 2,
"r14": 139952134227496,
"r15": 0,
"rsi": 60,
"rdi": 0,
"rsp": 140737461504296,
"rbp": 0,
"rip": 139952131034630,
"rflags": 582,
"orax": 231
}
我附加~{}是为了格式化命令的 JSON 结果
如您所见,寄存器的值是十进制的,包括我们修改的rax和rdx。通过这种方式,您可以享受 JSON 格式的输出,该输出将以十进制显示寄存器的值。