visual-studio - 尝试编译程序集时如何调试“未解决的外部”错误?
问题描述
我正在使用 Visual Studio 2013 并尝试编写“原始”程序集。我刚开始学习汇编,所以我不太了解它,但如果可能的话,我想编写汇编,而不用 C/C++ 或任何其他语言包装它。
我有一个文件 main.asm,其中包含我试图运行的以下代码。我只是想确认我可以运行一个 asm 程序,以便在阅读汇编的工作原理时可以使用代码。
.MODEL FLAT
.code
neg eax
add eax,5 ;eax = eax -5
END
编译时,我收到以下错误:
Error 1 error LNK2001: unresolved external symbol _main
Error 2 error LNK1120: 1 unresolved externals
我该如何解决这个问题并了解正在发生的事情?
解决方案
CRT 启动代码想要调用一个名为main
(或_main
在 asm 中)的函数。你没有提供一个,所以你的程序没有链接。
main
与编译缺少函数的 C 程序完全相同的错误。去寻找一些 MASM 语法 hello world 的例子,或者声明一个函数。例如,Windows 下如何用汇编程序编写 hello world?有一个 MASM 答案(这个问题被标记为 NASM,所以大多数答案都是针对 NASM 的,这是英特尔语法汇编的另一种主要风格。)
SO 上的其他点击包括x86 masm hello world,它从静态可执行文件手动调用 CRT init 函数,因此如果您只是编写相当于简单 C 程序的内容,那么这比您需要的更复杂。
和/或查看编译器生成的 asm 输出以了解它是如何使用PROC
/END
的。 http://godbolt.org/安装了 MSVC,以及 gcc / clang(发出 GAS 语法)
推荐阅读
- append - 每月将 csv 文件附加到 Pickle 文件并更新 pickle 文件
- android - Android.mk 是否需要 AndroidManifest.xml?
- c# - 如何在 C# 应用程序中存储 SNMP-V3 凭据
- swiftui - SwiftUI 增加了从内部函数调用查看的延迟
- asp.net - 自定义 IdentityUser ef 核心中的问题
- dolphindb - 如何查看流数据引擎占用的内存大小?
- javascript - 绝对定位的侧边栏在打开时获得额外的边距
- flutter - 使用双 CPU 时 Flutter 构建时间会增加吗?
- salesforce - 有没有办法将列表分配给字段?
- asp.net-core - EF Core - 从每个类型的表迁移到每个层次结构的表