繁体   English   中英

尽管链接了库,但我的x86-32代码中未解析的外部符号

[英]Unresolved external symbols in my x86-32 code despite linking the library

我正在用Microsoft的技巧学习x86,并且尝试调用ExitProcess。 我知道此函数是在kernel32.lib中定义的,因此我在构建步骤中将其链接了,无法正常工作。 我尝试在源代码中执行“ includelib kernel32.lib”,同样的错误。 这是我用来构建它的代码和命令:

.model flat, C
.stack 4096

includelib kernel32.lib
includelib user32.lib

extrn ExitProcess: proc

.code
main proc
    mov eax, 0
    ret
main endp

end main

这就是我构建此源代码的方式(我正在使用命令行工具ml.exe):

ml -Zi -nologo ..\code\main.asm /link -nologo -subsystem:windows User32.lib Kernel32.lib -entry:main

这是汇编器抛出的错误:

Assembling: ..\code\main.asm
main.obj : error LNK2019: unresolved external symbol _ExitProcess referenced in function _main

main.exe:致命错误LNK1120:1个未解决的外部组件我已经在网上进行了广泛的搜索,但这似乎是汇编我的代码所需的全部。 我只是不知道如何使它工作。 请帮忙。

如果您不喜欢导出函数的怪异且丑陋的名称处理,那么您并不孤单。 我认为函数应使用与记录中相同的名称进行调用,例如在https://docs.microsoft.com/zh-cn/windows/desktop/api/winuser/nf-winuser-messagebox中

我写了一个工具https://euroassembler.eu/ ,它比MASM易于使用。 您在EUROASM中的程序如下所示:

main program format=PE,entry=main
      import MessageBoxA,lib=user32.dll
      import ExitProcess,lib=kernel32.dll
 main proc
       push 0, ="Caption", ="Hello, world!",0 ; Msgbox requires 4 parameters.
       call MessageBoxA
       push 0                                 ; ExitProcess requires 1 parameter.
       call ExitProcess
      endp
    endprogram

这是我从此源构建main.exe的方法:

euroasm.exe main.asm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM