如果我想找到所有对fs:[0x28]的引用,我将如何使用radare2进行处理?例如,

0x000006b5      64488b042528.  mov rax, qword fs:[0x28]    ; [0x28:8]=0x1978 ; '(' ; "x\x19"


我想找到所有引用fs:[0x28]的行,就像上面的那一行。该地址用作堆栈金丝雀,我特别想知道从中读取的内容。

#1 楼

似乎您可以仅使用地址axt来查找使用0x28(查找该地址的数据/代码引用)对其进行写操作的事物。我仍然不确定如何限定内存段,

[0x000006aa]> axt 0x28
sym.foo 0x6b5 [DATA] mov rax, qword fs:[0x28]


但这不起作用,

[0x000006aa]> axt fs:[0x28]
entry0; [14] -r-x section size 514 named .text 0x5a0 [CODE] xor ebp, ebp
sym.__libc_csu_init 0x779 [CALL] call qword [r12 + rbx*8]


#2 楼

通过查看此函数的实现方式,看起来似乎没有任何选择(但可以在Telegram的r2上询问)。它只需要一个要转换为数字的字符串,仅此而已。如果要查看使用fs:[0x28]的所有位置,为什么不搜索操作码的这一部分?

[0x004049a0]> /c fs:[0x28]
0x00402a19   # 9: mov rax, qword fs:[0x28]
0x00403f81   # 9: xor rcx, qword fs:[0x28]
0x00404dc1   # 9: mov rax, qword fs:[0x28]
0x00404de6   # 9: xor rdx, qword fs:[0x28]
0x00405431   # 9: mov rax, qword fs:[0x28]
0x004054ea   # 9: xor rbx, qword fs:[0x28]
...