因此,我尝试加载一些二进制文件,并且在main函数中,我看到了诸如

mov     edi, [esi+1Ch]
...
lea eax, [esi+18h]


这样的指令,那么[esi + 1Ch]和[esi + 18h]。您如何看待IDA Pro。

#1 楼

可用的选项之一是在idapython控制台中相应地简单地运行Dword(cpu.esi+0x1c)Dword(cpu.esi+0x18)

#2 楼

看到OP对RE.SE来说是新的,并且从问题本身的外观来看,我将假定OP对逆向工程而言相对较新。如果不是这种情况,我们深表歉意。

显示为[esi+1Ch][esi+18h]的值是引用指令执行时当前存储在所列寄存器中的值。可执行文件运行并调试它的执行,停止您感兴趣的说明进行调查可能很难计算出那里的价值。显然,与所述寄存器有关的先前指令可以使其更容易或更难。例如,可以将一个特定的立即值分配给寄存器,从而非常容易地追溯到该值。

尽管IDA的调试器可能不是最好的,但您绝对可以将其设置为断点并读取值。作为另一个答案,使用IDAPython可以做到这一点,方法是访问cpu对象的寄存器值本身并添加偏移量。然后,如果实际取消了所得地址,则调用Dword将使您读取内存中当前的值。在汇编的两行中询问的第一个(而不是第二个)取消引用就是这种情况(这是因为lea指令的方式)。