Внешняя процедура в FASM

Я пытался экспортировать процедуру из внешнего файла в основную программу сборки, но это не сработало.

Вот тестовый код из внешнего файла:

; 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  

При компиляции основного файла я получаю ошибку Illegal Instruction в строке с ключевым словом extrn.

Пробовал искать в сети, но мне не повезло найти, как подключить внешнюю процедуру в FASM...

Спасибо!


person Dgek    schedule 10.04.2011    source источник


Ответы (2)


Я вижу, что у вас есть два исполняемых файла с графическим интерфейсом, так что означает «процедура экспорта из внешнего файла в основную программу сборки»?
Вы хотите создать два объектных файла (.obj) и затем связать их вместе?
Тогда используйте format MS COFF в обоих файлах, добавьте правильные директивы extrn и public и используйте какой-нибудь компоновщик (например, link.exe) для создания файла .exe.

Также прочтите fasm.pdf, раздел 2.4.3 «Общий формат объектных файлов».

person Abyx    schedule 23.07.2011

Я полагаю, что с 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

person user176692    schedule 20.01.2020