繁体   English   中英

C ++ ASM内联如何在ASM中使用结构成员?

[英]C++ ASM Inline how to use struct members in ASM?

我有以下

struct john {
    int oldA;
    int A;
} myJohn;
DWORD gotoAddressBack = 0x00401000;

void __declspec( naked ) test(void) {
    __asm {
        MOV myJohn.oldA, DWORD PTR DS:[ESI+0x77C]
        MOV DWORD PTR DS:[ESI+0x77C], myJohn.A
        JMP gotoAddressBack
    }
}

您可以说两个MOV都生成error C2415: improper operand type.

如您所见,我想做的是将[ESI + 0x77C]的值存储到myJohn.oldA中

然后,我想用myJohn.A替换相同的[ESI + 0x77C]的值

MOV指令没有内存/内存操作数。 您应该将寄存器用于此类用法。 就像这样:

void __declspec( naked ) test(void) {
    __asm {
        MOV EAX, DWORD PTR [ESI+0x77C]
        MOV myJohn.oldA, EAX

        MOV EAX, myJohn.A
        MOV DWORD PTR [ESI+0x77C], EAX

        JMP gotoAddressBack
    }
}

顺便说一句,我真的怀疑您真的必须在现代OS下处理段寄存器(由于虚拟内存,即可以使用直接地址)。 完成上述更改后,您应该检查代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM