MOV EAX, DWORD PTR SS:[EBP+8h] 的含义是什么,我怎样才能把它翻译成 AT&T 格式?



我使用Code::Blocks进行编码,但我引用的其中一个代码来自Visual C++,所以我很难理解区别…:(

完整的代码在这里

NAKED void ijlWrite()
{
__asm {
    PUSH    EBP
    MOV     EBP, ESP
    MOV     EAX, DWORD PTR SS:[EBP+8h]
    MOV     ECX, ssQuality
    MOV     DWORD PTR DS:[EAX+50h], ECX
    MOV     EDX, DWORD PTR SS:[EBP+0Ch]
    PUSH    EDX
    MOV     EAX, DWORD PTR SS:[EBP+08h]
    PUSH    EAX
    CALL    lpfnIJLWrite //a global variable
    POP     EBP
    RETN
}
}

如果你能把它们全部翻译出来,我将不胜感激。

第页。S.我也不知道如何翻译RETN。怎么做?备忘单没有这样的东西:(

难道不能用C++编写函数吗?多一点类型信息会有所帮助,但这个怎么样?

void ijlWrite(int* p, int i)
{
    p[80] = ssQuality;
    lpfnIJLWrite(p, i);
}
MOV     EAX, DWORD PTR SS:[EBP+8h]

相当于

movl %ss:8(%ebp), %eax

只要交换源和目的地的顺序,DWORD就会转换为l后缀。%ss:前缀是绝对不必要的,这是使用基于EBP的内存访问时的默认前缀。

我认为是

movl %ss:8(%ebp), %eax

请参阅此以获取快速参考。

最新更新