FASM中的外部过程

问题描述 投票:1回答:2

我一直在尝试将过程从外部文件导出到主程序集,但是没有用。

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

; 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中附加外部程序...

谢谢!

external assembly extern fasm
2个回答
2
投票

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

也请阅读fasm.pdf,第2.4.3节“公共目标文件格式”。


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

© www.soinside.com 2019 - 2024. All rights reserved.