最近我向社区咨询了两个偏移量Visual-C++ inline assembler difference of two offsets的差异,很快得到了回复,非常感谢。现在我遇到了另一个更糟糕的问题。
我有一个类似这样的指令
..naked...
__asm{
...
mov eax, dword ptr [ebx + offset data1]
...
}真正的问题是它被编译为
mov eax, [offset data1]这一行没有编译器警告(/WAll模式),但是代码被改变了很多-想象一下,它被抛出了ebx + part!默默地。它是一个编译器错误还是一个特性?也许我必须指定一些额外的标志?
问题只与偏移量有关,因为
mov eax, dword ptr [ebx + 0xconst]是正确编译的。
是的,我可以使用代码
mov eax, offset data1
add eax, ebx
mov eax, [eax]但是有很多代码需要修改。让我困扰的是没有任何警告;
发布于 2012-11-25 22:28:06
终于,我在MSDN论坛上找到了答案。如果您只使用mov eax,ebx + data1location,而不是mov eax,ebx + offset data1location,它将被正确编译。但是,'offset‘是MASM语法的合法关键字,应该被MS C++编译器接受。然后"ebx +“就被悄悄地扔掉了。
https://stackoverflow.com/questions/13514682
复制相似问题