Je suis un peu un noob à cela mais j'espère que cet exemple vous mettra sur votre chemin. Je l'ai testé et cela fonctionne, le seul problème que vous pourriez avoir est un logiciel qui n'est pas disponible. J'utilise nasm pour l'assemblage.
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
Notes:
Vous devez installer nasm (assembleur) (ubuntu il est : sudo apt-get install nasm) 0 Ce qui se passe essentiellement dans le code c appelle myFunc avec un message. Dans myFunc.asm nous obtenons l'adresse du premier caractère de la chaîne (qui est dans [ebp + 8] voir ici pour information (http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html voir 9.1.2 qui décrit un peu les conventions d'appel c) et nous le passons à la fonction printf (en le poussant sur la pile) .printf est dans la bibliothèque standard c que gcc liera automatiquement à notre code par défaut sauf si nous disons non
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 que nous puissions afficher le message en tant que tout simplement possible
Exactement ce que je cherche. –
@jwwishart Vous avez maintenant 1337 points de réputation. Ce serait dommage si quelqu'un vous votait, n'est-ce pas? ^^ – displayname