2

我一直在尝试将程序从外部文件导出到主汇编程序,但没有成功。

这是来自外部文件的测试代码:

; Export procedure Summa
format PE GUI 4.0

include 'win32a.inc'

section '.code' code readable executable

proc Summa
Public Summa
ret 2
endp

在主文件中,我尝试附加 Summa:

format PE GUI 4.0

include 'win32a.inc'

section '.data' data readable writeable

extrn Summa as Summa : proc  

编译主文件时,在带有 extrn 关键字的行中出现非法指令错误。

试图在网上搜索,但我没有找到应该如何在 FASM 中附加外部程序的方法......

谢谢!

4

2 回答 2

2

我看到您有两个 GUI 可执行文件,那么“将程序从外部文件导出到主汇编程序”是什么意思?
您想制作两个目标文件 (.obj),然后将它们链接在一起吗?
然后format MS COFF在这两个文件中使用,添加适当的extrnpublic指令,并使用一些链接器(例如 link.exe)来构建 .exe 文件。

另外,请阅读 fasm.pdf,第 2.4.3 节“通用对象文件格式”。

于 2011-07-23T18:18:31.453 回答
0

使用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

于 2020-01-20T05:50:33.103 回答