有没有办法以带符号的整数形式查看类似dr=的结果?

> dr rax = 298; dr rdx = 42; dr=
 rax 0x0000012a           rbx 0x00000000           rcx 0x00000000
 rdx 0x0000002a           rsi 0x00000000           rdi 0x00000000
  r8 0x00000000            r9 0x00000000           r10 0x00000000
 r11 0x00000000           r12 0x00000000           r13 0x00000000
 r14 0x00000000           r15 0x00000000           rip 0x00005850
 rbp 0x00000000           rflags              rsp 0x00000000


希望将raxrdx读为十进制。

#1 楼

尽管radare2提供了大量命令来处理寄存器(请参阅dr?),但是以十进制模式查看寄存器的值是非常棘手的。也就是说,我将向您展示两种简单的方法(命令),您可以选择两种方法来实现自己的目标。

我们将从执行您提到的命令开始,以更改raxrdx的值:

[0x7f49250e4e06]> dr rax = 298
0x00000000 ->0x0000012a
[0x7f49250e4e06]> dr rdx = 42
0x00000000 ->0x0000002a
[0x7f49250e4e06]>


1。仅打印一个寄存器
这是更优雅的解决方案。从问题的第一部分开始,我了解到您希望以十进制模式打印所有寄存器,但最后只引用raxrdx。在这种情况下,以下命令可以为您显示十进制模式下特定寄存器的值:

[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结果。

如您所见,寄存器的值位于十进制,包括我们修改后的raxrdx。这样,您可以享受JSON格式的输出,该输出将以十进制显示寄存器的值。