【发布时间】:2012-11-10 23:14:46
【问题描述】:
最近我向社区询问了两个偏移量的差异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]
但是那时有很多代码需要更改。困扰我的是没有任何警告;
【问题讨论】:
标签: c windows x86 inline-assembly