Je suis un peu novice en la matière, mais j'espère que cet exemple vous mettra sur la voie. Je l'ai testé et il fonctionne, le seul problème que vous pourriez avoir est que le logiciel n'est pas disponible. J'utilise nasm pour l'assemblage.
main.c
extern void myFunc(char * somedata);
void main(){
myFunc("Hello World");
}
monFunc.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
Notes :
Vous devez installer nasm (assembleur) (ubuntu c'est : sudo apt-get install nasm)
Ce qui se passe essentiellement dans le code c appelle le myFunc avec un message. Dans myFunc.asm nous obtenons l'adresse du premier caractère de la chaîne de caractères (qui est dans [ebp+8] voir ici pour plus d'informations (http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html voir 9.1.2 qui décrit quelque peu les conventions d'appel en c.) et nous la passons à la fonction printf (en la poussant sur la pile). printf est dans la bibliothèque standard c que gcc liera automatiquement dans notre code par défaut à moins que nous ne le disions pas.
Nous devons exporter myFunc dans le fichier d'assemblage et déclarer myFunc comme une fonction extrnale dans le fichier main.c. Dans myFunc.asm nous importons également la fonction printf de stdlib afin de pouvoir sortir le message le plus simplement possible.
J'espère que cela vous aidera un peu.