[英]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.