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

时间:2014-04-21 14:26:36

标签: assembly reverse-engineering ida ollydbg

在使用OllyDbg和IDA PRO拆解相同的程序时,我有一行代码以不同的方式进行反汇编。

OllyDbg的:

    MOVSX EDX,BYTE PTR [ESP+ECX+8]

IDA:

    MOVSX EDX, [ESP+ECX+68h+String]

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

3 个答案:

答案 0 :(得分:4)

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]

而ida会显示

text:00405712                 mov     eax, [esp+1Ch+arg_4]

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

.text:004056E0 arg_4           = dword ptr  14h

14h + 1ch == 30h

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

你可以运行这个脚本

shift +f2 paste and press ok 

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

auto i;

for (  i = MinEA() ; i < MaxEA() ; i = NextHead(i, MaxEA()) )
{
    OpHex(i,-1);
}

答案 1 :(得分:1)

IDA尝试将此命令设置为与局部变量相关。 [ESP+ECX+8]指向与[ESP+ECX+68h+String]相同的地址。您可以将IDA的输出读作[ESP+ECX+8+String+60h]。我也很困惑,IDA在BYTE PTRWORD PTR之间没有区别,两者都会产生不同的命令。

答案 2 :(得分:0)

正在寻找类似的IDA问题。 IDA将此指令正确列出为:

inc byte ptr ds:900h

但是当您在偏移量上放置标签时,它确实会

inc ds:byte_900

通过命名偏移量,有效地取消了ptr和字节引用。:shrug: