c - Visual-C++ 内联汇编程序编译不正确

标签 c windows x86 inline-assembly

最近我向社区询问了两个偏移量的差异 Visual-C++ inline assembler difference of two offsets并很快得到回复,非常感谢。 现在我遇到了另一个问题,这个问题更糟。

我有这样的指令

    ..naked...
    __asm{
    ...
    mov eax, dword ptr [ebx + offset data1]
    ...
    }

真正的问题是它被编译为

    mov eax, [offset data1]

此行没有编译器警告(/WAll 模式),但代码已更改且更改很多 - 想象一下,它完全被抛出 ebx + 部分!默默。 它是编译器错误还是功能?也许我必须指定一些额外的标志?

问题仅在于偏移量,因为

    mov eax, dword ptr [ebx + 0xconst]

编译正确。

是的,我可以绕过代码

    mov eax, offset data1
    add eax, ebx
    mov eax, [eax]

但是那时有很多代码需要更改。令我困扰的是没有任何警告;

最佳答案

最后,我在 MSDN 论坛上找到了答案。 如果您只使用 mov eax, [ebx + data1location],而不是 mov eax, [ebx + offset data1location],它会被正确编译。但是,'offset' 是 MS C++ 编译器应该接受的 MASM 语法的合法关键字。但随后“ebx +”被默默地扔掉了。

关于c - Visual-C++ 内联汇编程序编译不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13514682/

相关文章:

python-3.x - 为什么下载 x86-64 python 安装程序会导致我的 PC 上出现 32 位设置?

c# - 从 x64 C# 应用程序调用 x86 PowerShell 脚本

加载字节时,Clang 不会将高位清零。这是一个错误还是一个故意的选择?

C程序自动关闭

windows - 如何完全离线安装 Chocolatey 包?

c++ - 防止使用 ImpersonateNamedPipeClient()

assembly - 80386 - cpu如何选择movzbw和movzbl

c - 破管错误

c - 关于 fork() 的问题

c - 为什么会出现段错误?