【发布时间】:2013-10-24 08:15:59
【问题描述】:
谁能告诉我如何将 masm 输出与其他目标文件链接起来。例如 main.obj。
我正在开发一个 Windows 内核模式驱动程序,我想移动内联 asm 块以分隔 .asm 文件以满足进一步的要求并防止进一步的困难,例如:x64 不支持内联 asm。
所以,我将 vm.asm 源文件添加到项目中,并从构建自定义中选择了 masm。之后,我为项目类型选择了 Microsoft 宏汇编程序。当我构建项目时 vm.obj 文件已成功为 vm.asm 文件创建。但我不能从 C 代码调用 asm 函数(proc)。应该是链接错误,我认为构建过程没有将 obj 文件放在一起。
我也试过 stdcall 和 cdecl 但结果是一样的。
我的 vm.asm:
.386
.model flat, C
option casemap :none
PUBLIC _get_vm
_get_vm PROC
mov eax, 0101h
db 0fh
db 01h
db 0c1h
ret
_get_vm endp
END
这是我的 c 调用:
ULONG vm_id;
extern int _cdecl get_vm();
vm_id = get_vm();
错误: project_ddk\main.obj:错误 LNK2019:函数 _DispatchPnP@8 中引用的未解析外部符号 _get_vm
我的 ml.exe 命令行:
ml.exe /c /nologo /safeseh /Zi /Fo"%(FileName).obj" /Fl"" /W3 /errorReport:prompt /Ta
【问题讨论】:
-
你试过去掉下划线吗?
-
是的,我试过了。但结果相同。
-
您是否检查过您的 asm 文件导出了哪些符号?您应该会看到主文件所期望的名称。
-
@Devolus 我如何检查它?我的意思是符号
-
我不知道你使用的是哪个环境,但如果你安装了 Visual Studio,你应该有
dumpbin,它类似于 Linux 下的objdump。有了这个,您可以检查您的 lib/obj 文件的所有方面。dumpbin /SYMBOLS your_asm.obj应该显示你所有的名字。
标签: assembly build driver linker-errors symbols