Вызов процедуры сборки из другого файла сборки?
Просто простой вопрос:
Допустим, у меня были следующие две программы сборки:
1:
add10:
add eax, 10
ret
;call add5 from other file
2:
add5:
add eax, 5
ret
;call add10 from other file
Могу ли я позвонить add10
(заявлено в первом файле) из второго файла, или наоборот? Если так, как это можно сделать? (даже если это невозможно)
ПРИМЕЧАНИЕ: это будет работать на голом металле, а не на любых модных звонках NT!
Благодарю.
Изменить: я использую NASM на Windows.
2 ответа
Если оба файла связаны в один и тот же исполняемый файл, да. Поиск EXTERN или EXTRN.
Два файла:
1:
BITS 32
GLOBAL add5
section .code
add5:
add eax, 5
ret
2:
BITS 32
EXTERN add5
EXTERN printf
EXTERN ExitProcess
section .data
fmt db `eax=%u\n`
section .code
add10:
add eax, 5
call add5
ret
_main:
mov eax, 87
call add10
push eax
push fmt
call printf
add esp, 8
push 0
call ExitProcess
Соберите и свяжите их вместе. Я использовал в качестве компоновщика GoLink, другие компоновщики похожи:
nasm.exe -fwin32 -o add5.obj add5.asm
nasm.exe -fwin32 -o add10.obj add10.asm
GoLink.exe /ENTRY:_main /console /fo add10.exe add5.obj add10.obj kernel32.dll msvcrt.dll
Я назвал источники "add5.asm" и "add10.asm". Ассемблер создает "add5.obj" и "add10.obj". Компоновщик использует "add5.obj" и "add10.obj" и некоторые системные библиотеки (для "printf" и "ExitProcess"). Результатом является исполняемый файл "add10.exe". Посмотрите на командные строки, чтобы получить порядок этих имен. Имена произвольны.
НТН