gpt4 book ai didi

C++ ASM Inline如何在ASM中使用struct成员?

转载 作者:行者123 更新时间:2023-11-28 01:00:34 26 4
gpt4 key购买 nike

我有以下内容

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 都生成了错误 C2415:不正确的操作数类型。

如您所见,我想做的是将 [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
}
}

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

关于C++ ASM Inline如何在ASM中使用struct成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com