【问题标题】:External procedure in FASMFASM 中的外部程序
【发布时间】:2011-04-10 15:15:25
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: external assembly extern fasm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-08-20
        • 2012-06-07
        • 1970-01-01
        • 2021-11-20
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多