Se connecter / S'enregistrer
Votre question

[ASM/C]Compiler/lier

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
6 Mai 2009 23:22:37

Bonsoir ,

Voilà , j'aimerai lancer un programme en asm par le biais d'un programme en C , parce que comme je débute je pourrais utiliser la bibliothèque standard du C , donc j'utilise MinGW pour gcc et nasm pour assembler et pour avoir un fichier objet .

Donc comme code j'ai :

[ASM] ( squelette vide , ça ne sert a rien de faire des trucs si je n'arrive pas a faire marché :p  )

  1. %include "asm_io.inc"
  2. segment .data
  3.  
  4. segment .bss
  5.  
  6. section .text
  7. global _asm_main
  8.  
  9. _asm_main:
  10. enter 0,0
  11. pusha
  12.  
  13.  
  14.  
  15. popa
  16. mov eax,0
  17. leave
  18. ret


[C]

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6. int ret_status;
  7. ret_status=_asm_main();
  8. return ret_status;
  9. }


donc avec ça , par étape :

-je compile le fichier main.c avec "gcc -c main.c" pour avoir un fichier main.o
-j'assemble le fichier asm avec "nasm -f win32 code.asm -o code.o
-et à la fin je les lie avec "gcc -o main.o code.o asm_io.o"

et c'est la ou ça bloque j'ai un message d'erreur : undefined reference to `_asm_main'

Je suis sous windows donc le problème peut venir de là , j'ai vu sur le net qu'il fallait utiliser WinMain@16 mais bon quand on compile le fichier c il y a une erreur avec le @ ..

PS: quand j'utilise ld directement pour faire un exécutable , le programme marche..(enfin il n'y a pas de message d'erreur)
PS2: j'ai bien mis tous le tralala dans le PATH windows..

Je trouve plein de tuto ...mais sous distrib linux..

Merci d'avance ;)  :) 

'nuit

Autres pages sur : asm compiler lier

7 Mai 2009 22:04:37

Bon bha j'ai réussi à trouver le problème !!!!

en faite j'ai rajouté un _ de trop à "ret_status=_asm_main();" dans la source C , il faut en faite mettre :" ret_status= asm_main();"

tout ça pour ça . :pt1cable: 


Bon je pense que ça fait un mini tuto pour ceux qui veulent découvrir :p  ensuite go le tuto de Paul Carter version fr sur dvlpez.com .


:) 
a b L Programmation
7 Mai 2009 22:38:03

Oui dans l'exécutable, la signature n'est pas le nom exact, c'est comme avec les @ et autres paramètres (la signature dans main.o et code.o doivent correspondre).
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS