我正在反转 x86 ELF 共享对象库。也许是因为位置无关性,所有函数都从将常量偏移量加载到寄存器中开始:
[... function prologue ...]
call $+5
pop eax ; eax = eip = 0x4E2B
add eax, 1009Dh ; eax = 0x14EC8 = start of .got.plt section
mov byte ptr [eax+194h], 0ACh
mov dword ptr [eax+190h], 968CC5DEh
[...]
前两条指令设置eax为当前指令的地址。然后添加一个常量偏移量,这个偏移量可能是在链接过程中计算出来的。从那时起,所有地址都是相对引用的eax(在这种情况下,它们指向.bss段)。
因为 的值eax是固定的,所以我可以手动计算所有地址。是否有一种自动化的方法来解决 IDA 中的这些固定寄存器偏移量,以便 IDA 可以正确地解决 X-refs 等问题?