小编b0c*_*zz3的帖子

x86 中的下划线前缀问题:从 C++ 函数调用 NASM 函数在 x64 中有效,但在 x86 中失败

我在 Windows 10 中使用 Visual studio 2019,我想使用 MSVC(平台工具集 142)和 NASM(版本 2.14.02)在 x86 中编译以下代码:

foo.asm

section .text

global foo
foo:
    mov eax, 123
    ret
Run Code Online (Sandbox Code Playgroud)

主程序

extern "C" int foo(void);

int main()
{
    int x = foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我得到了错误:

在此输入图像描述

在 x64 中运行良好,在 x86 中生成的文件 main.obj 向函数名 foo 添加前导下划线,从而生成 _foo。这在 x64 中不会发生,但将符号保留为 foo,而不是 _foo。

那么,是否有任何适用于 x86 和 x64 平台的解决方案(最好不修改源代码,也许是 MSVS 编译器的一些编译器/链接器标志)?

我真的很感谢任何帮助。

c++ windows assembly nasm visual-studio-2019

3
推荐指数
1
解决办法
1431
查看次数

标签 统计

assembly ×1

c++ ×1

nasm ×1

visual-studio-2019 ×1

windows ×1