MOVSX EDX,BYTE PTR [ESP + ECX + 8]命令在OllyDbg和IDA PRO中的差异

Art*_*nyk 1 assembly reverse-engineering ida ollydbg

当使用OllyDbg和IDA PRO分解同一程序时,我用不同的方式反汇编了一行代码。

OllyDBG:

    MOVSX EDX,BYTE PTR [ESP+ECX+8]
Run Code Online (Sandbox Code Playgroud)

IDA:

    MOVSX EDX, [ESP+ECX+68h+String]
Run Code Online (Sandbox Code Playgroud)

有人可以在这里解释IDA PRO的意思吗?我对这里的68h + String部分感到沮丧。我可以假设68h + String始终表示BYTE PTR吗?

bla*_*abb 5

ida应该已经STRING to be a LOCAL variable在函数/过程的开始处声明了-60h的值

(68 + STRING)==(68 +(-60))==(68-60)== 8它与ollydbg显示的内容相同。

IDA的反汇编语法容易造成混淆

以ollydbg为例

00405712     8B4424 30       MOV     EAX, DWORD PTR SS:[ESP+30]
Run Code Online (Sandbox Code Playgroud)

而艾达会显示

text:00405712                 mov     eax, [esp+1Ch+arg_4]
Run Code Online (Sandbox Code Playgroud)

因为在函数开始时ida已将arg_4定义为

.text:004056E0 arg_4           = dword ptr  14h
Run Code Online (Sandbox Code Playgroud)

那是

14h + 1ch == 30h
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢ida语法,但想直接看到[esp + 30]

您可以运行此脚本

shift +f2 paste and press ok 
Run Code Online (Sandbox Code Playgroud)

注意所有ida idc函数对于任何批量操作都太慢,而不是MaxEA()将其缩减到一些较小的块,以便在下面的代码段中获得更快的结果

auto i;

for (  i = MinEA() ; i < MaxEA() ; i = NextHead(i, MaxEA()) )
{
    OpHex(i,-1);
}
Run Code Online (Sandbox Code Playgroud)