MS Visual Studio 2010如何使用.asm生成的文件

发布于 2024-12-09 11:26:29 字数 273 浏览 0 评论 0原文

我想询问一些我想尝试使用 Visual Studio 2010 的事情。

我通过在项目属性中将选项设置为“汇编器输出”来从 .cpp 文件生成一个 .asm 文件 --> C/C++ -->输出文件 (/FA)。

我的问题是,下一步如何使用 .asm 生成的文件从该文件再次链接,而不再使用 .cpp 文件,以防我想在 .asm 文件内进行一些修改,然后通过保留再次链接我在装配级别所做的修改。

如果您可以提供确切的步骤,包括项目属性中可能需要的正确配置,那将非常有帮助。

I would like to ask about something I am thinking to try with Visual Studio 2010.

I am generating an .asm file from the.cpp file by setting the option to the "Assembler Output" in the project properties --> C/C++ --> Output Files (/FAs).

My question is, how can I on a next step use that .asm generated file to link again from that one without using anymore the .cpp file, in case I want to do some modifications inside the .asm file and then link again by keeping the modifications I did at assembly level.

It would be very helpful if you could provide the exact steps, including the correct configuration may needed in the project properties.

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

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

发布评论

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

评论(3

祁梦 2024-12-16 11:26:29

我最近做了这个。这是我在这里给出的答案的重复 compile- assembly-output-由-vc 生成。事实证明,在 MSVC2012 中您仍然可以在 32 位模式下执行此操作,但我认为 64 位模式是没有希望的。

对于 32 位模式,您需要执行以下操作。

创建一个空项目和一个源文件 Source.cpp

 #include <stdio.h>
 int main() {
     printf("hello world\n");
     return 0;
 }
  1. 右键单击​​您的项目并选择“构建自定义”并
    按照此处所述选择 masm http://www.masm32.com/board/index .php?topic=9231.0
  2. 在 C++/OutputFiles 下选择 Assembly Output /FA
  3. Compile in 32-bit mode Release mode
  4. Source.asm 文件加载到MSVC 这样你就可以查看它。还行不通。仍然需要进行一些更改。
  5. 在 C++/Optimization 下关闭 Whole Program Optimization(删除 /GL)。这会添加行 INCLUDELIB MSVCRT
  6. 在链接器/高级中将最后一个选项“Image Has Safe Exception Handlers”设置为 No (/SAFESEH:NO)
  7. 现在您应该有一个源.asm 文件将执行与 Source.cpp 文件相同的操作。将 Source.cpp 从 Release 目录复制到与 Source.cpp 相同的目录(这样在构建/清理时不会删除它)。
  8. Source.asm(作为现有文件)添加到源文件中,并从构建中删除Source.cpp
  9. 重新构建,您应该看到“Hello World”,而无需手动更改任何装配线。

我已将其用于更复杂的功能。我通常在单独的模块上执行此操作,并在函数名称上使用 extern "C" 来删除 C++ 名称修饰。

I did this recently. Here is a repeat of the answer I gave here compile-assembly-output-generated-by-vc. It turns out you can still do this in 32-bit mode in MSVC2012 but I think 64-bit mode is hopeless.

For 32-bit mode here is what you do.

Create an empty project and a source file Source.cpp

 #include <stdio.h>
 int main() {
     printf("hello world\n");
     return 0;
 }
  1. Right lick on your project and select "Build Customization" and
    select masm as described here http://www.masm32.com/board/index.php?topic=9231.0
  2. Under C++/OutputFiles select Assembly Output /FA
  3. Comipile in 32-bit mode Release mode
  4. Load the Source.asm file into MSVC so you can view it. It won't work yet. A few changes are still necessary.
  5. Under C++/Optimization turn off Whole Program Optimization (removes /GL). This adds the line INCLUDELIB MSVCRT
  6. In the Linker/Advanced set the last option "Image Has Safe Exception Handlers"to No (/SAFESEH:NO)
  7. Now you should have a Source.asm file which will do the same thing that Source.cpp file did. Copy the Source.cpp from the Release directory to the same directory as Source.cpp (so it's not deleted when you build/clean).
  8. Add Source.asm (as an existing file) to the Source Files and remove Source.cpp from the build.
  9. Rebuild and you should see "Hello World" without having to change any assembly lines by hand.

I have used this for more complicated functions. I usually do it on a separate module and use extern "C" on the function name to remove the C++ name mangling.

青萝楚歌 2024-12-16 11:26:29

只需将 .obj 文件拖到项目(解决方案资源管理器树)中即可:
如何将 .obj 文件包含到项目中

Simply drag the .obj files into the Project (Solution Explorer tree):
How to include .obj files into the project

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