我一直在尝试将过程从外部文件导出到主程序集,但是没有用。
这里是来自外部文件的测试代码:
; Export procedure Summa
format PE GUI 4.0
include 'win32a.inc'
section '.code' code readable executable
proc Summa
Public Summa
ret 2
endp
并且在主文件中,我尝试附加摘要:
format PE GUI 4.0
include 'win32a.inc'
section '.data' data readable writeable
extrn Summa as Summa : proc
编译主文件时,在使用extrn关键字的行中出现非法指令错误。
试图在网上搜索,但是我不幸运地发现我应该如何在FASM中附加外部程序...
谢谢!
我看到您有两个GUI可执行文件,那意味着“从外部文件到主汇编程序的导出过程”是什么意思?是否要制作两个目标文件(.obj),然后将它们链接在一起?然后在两个文件中都使用format MS COFF
,添加正确的extrn
和public
指令,并使用一些链接器(例如link.exe)来构建.exe文件。
也请阅读fasm.pdf,第2.4.3节“公共目标文件格式”。
使用PE,我相信您可以像这样从DLL导入:
library kernel,'KERNEL32.DLL'
import kernel,\
ExitProcess,'ExitProcess'
如果使用MS COFF,则链接样式将根据您的位数32或64而有所不同:
32位:
format MS COFF
section '.data' data readable writeable
extrn '__imp__Summa@0' as Summa:dword
64位:
format MS64 COFF
section '.data' data readable writeable
extrn '__imp_Summa' as Summa:qword
一个很好的示例,显示了32位链接:https://flatassembler.net/examples/msvc.zip
您还可以将extrn与ELF64一起使用,例如Linux:https://2ton.com.au/rants_and_musings/gcc_integration.html
PE DLL函数导入示例:https://flatassembler.net/examples/quetannon.zip