Я немного новичок в этом, но, надеюсь, этот пример поможет вам в этом.Я протестировал его, и он работает, единственная проблема, с которой вы можете столкнуться, - это недоступность программного обеспечения.Я использую nasm для сборки.
main.c
extern void myFunc(char * somedata);
void main(){
myFunc("Hello World");
}
myFunc.asm
section .text
global myFunc
extern printf
myFunc:
push ebp
mov ebp, esp
push dword [ebp+8]
call printf
mov esp, ebp
pop ebp
ret
COMPILE
nasm -f elf myFunc.asm
gcc main.c myFunc.o -o main
Примечания:
Вам необходимо установить nasm (ассемблер) (это ubuntu: sudo apt-get install nasm)
То, что в основном происходит в коде c, вызывает myFunc с сообщением.В myFunc.asm мы получаем адрес первого символа строки (который находится в [ebp + 8], смотрите здесь для информации (http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html см. 9.1.2, который несколько описывает c соглашения о вызовах.), И мы передаем егоФункция printf (помещая ее в стек). printf находится в стандартной библиотеке c, которая по умолчанию автоматически связывает gcc с нашим кодом, если только мы не скажем.
Мы должны экспортировать myFunc в файл сборки иобъявите myFunc как функцию extrnal в файле main.c. В myFunc.asm мы также импортируем функцию printf из stdlib, чтобы мы могли вывести сообщение настолько просто, насколько это возможно.
Надеюсь, это поможет.