如何在 Radare2 中将默认输入基数更改为十六进制?

逆向工程 雷达2
2021-07-03 14:41:50

通常,当我使用 Radare2 时,我主要使用十六进制。这意味着我必须经常记住0x在地址前面输入,这与我习惯使用的机器语言监视器不同。(我通常使用 8 位系统的二进制文件,在机器语言中工作时很少使用十进制。)

有没有办法将默认输入基数设置为十六进制?我想能够输入s ff00,而不是s 0xff00在命令行,gff00而不是g0xff00在视觉模式。

如果我能做到这一点,在这种模式下,如果有必要,如何输入十进制数字?

对文档的链接表示赞赏。

2个回答

我想目前在radare2 中没有这样的选项(尽管更有经验的radare2 贡献者会肯定地告诉它)。

但是,如果您真的对0x每次都必须在前面键入's感到恼火,您可以执行一个临时(非常hacky)的解决方案。为此,您可以修改libr/core/cmd_seek.c文件(负责处理搜索命令)如下: r2SeekHack

然后用于make编译项目。在此之后,您将获得所需的功能(也可g在可视模式下使用):

r2HexSeekHack

您可以在下面找到补丁代码:

ut64 addr;
if ((input[1] >= '1' && input[1] <= '9') || (input[1] >= 'a' && input[1] <= 'f'))
{
    char inputHex[strlen(input) + 1];
    inputHex[0] = '0';
    inputHex[1] = 'x';
    int i = 2;
    for (; i < strlen(input) + 1; i++)
        inputHex[i] = input[i - 1];
    addr = r_num_math (core->num, inputHex);
} 
else
     addr = r_num_math (core->num, input + 1);

我不能说这有多大帮助,但你可以设置 e asm.tailsub=true 并使用 .. 而不是 0x
(这实际上并没有取代 0x 它是尾部替换)

也就是说,如果您执行 s .. 10 从当前查找或查找 0x100 如果您执行 s ..100 或查找 0x1000 如果您执行 s ..1000,它将寻求 +0x10

它只是通过替换整个身体来替换我们正在滥用的尾巴,如果您想知道为什么会这样,请查看编辑

喜欢

radare2 c:\Windows\System32\calc.exe
 -- Enable asm.trace to see the tracing information inside the disassembly
[0x140001820]> e asm.tailsub
false
[0x140001820]> s 1400018f0
Cannot seek to unknown address '1400018f0'
[0x140001820]> e asm.tailsub = true
[0x140001820]> s ..1400018f0
[0x1400018f0]>   

编辑解释什么是 .. 或 tailsub

[0x100000000]

> s entry0
[0x140001820]> s ..1337
[0x140001337]> s ..99999
[0x140099999]>