C++函数调用汇编模块

发布于 2024-11-12 17:16:25 字数 230 浏览 2 评论 0原文

我想在汇编中编写一个自定义模块并让我的 C++ 函数调用它。我不想从头开始,而是用 C 编写“草稿”,并让编译器生成蓝图汇编源,即由 /FA 编译器选项生成的列表文件。

但是,我发现生成的所有过程名称都已经是修饰形式了。此外,MASM还将再次进行自己的名称装饰。因此,如果我在不首先手动取消修饰编译器生成的过程名称的情况下组装我的版本,我会收到链接器错误,因为函数名称不匹配。

是否可以防止这种类型的重复名称装饰?

I want to write a customized module in assembly and have my C++ functions invoke it. Instead of starting from scratch I would like to write the "draft" in C and let the compiler generates a blue print assembly source i.e.the listing file generated by the /FA compiler option.

However, I found that all the procedure names generated are already in decorated form. Furthermore, the MASM will carry out its own name decoration again. So if I assemble my version without undecorating the compiler generated procedure name manually first I would get a linker error since the function names would not be matching.

Is possible to prevent this type of duplicated name decoration?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暮年慕年 2024-11-19 17:16:25

声明函数 extern "C" 应该会导致生成的汇编程序显示您应在汇编程序中使用的名称。只是不要忘记在标头中将其设为 extern "C" ,以便稍后将其声明为 C++。

Declaring the function extern "C" should result in the generated assembler showing the name you should use in assembler. Just don't forget to make it extern "C" in the header which declares it to C++ later.

も星光 2024-11-19 17:16:25

您可以将函数声明为 extern "C"。这样,它最多会在名称前加一个下划线:

extern "C"{
  void foo(int bla){
  }
}

将成为

_foo

You can declare your function as extern "C". That way, it will at most get an underscore before the name:

extern "C"{
  void foo(int bla){
  }
}

Will become

_foo
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文