Accueil > Forum > > > > nasm+alink pour un compilateur C
nasm+alink pour un compilateur C
lundi 10 avril 2006 à 18:51:00 |
nasm+alink pour un compilateur C

roygrizzly
|
Salut a tous, Je suis en train de programmer un compilateur pour un sous language C pour mes cours. Je travaille sous cygwin car on est obligé. Tout mon programme fonctionne, je suis a la phase génération du code assembleur mais j'ai un problème a la création de l'exécutable. Mon code asm généré pour int a=5; est : section .data a DW 0 section .text PUSH 5 POP AX MOV [a],AX int 0x20 qui est écrit dans le fichier a.asm je fais "nasmw.exe -f obj a.asm" afin d'avoir le fichier objet, ça marche puis je fais "ALINK.EXE a.obj " et ça me sort: ALINK v1.6 (C) Copyright 1998-9 Anthony A.J. Williams. All Rights Reserved Loading file a.obj matched Externs matched ComDefs Warning, no entry point specified Warning - no stack je ne sais pas pourquoi, je n'ai pas trouvé de réponse sur internet (peut-etre que j'ai mal cherché) ou soit mon code asm est faux (vu que j'y connais rien) MERCI
|
|
mardi 11 avril 2006 à 09:00:29 |
Re : nasm+alink pour un compilateur C

Nasman
|
Bonjour roygrizzly, Pour le mode de compilation que tu as spécifié (-fobj), il te faut définir le point d'entrée de la façon suivante: ..start: Ceci te supprimera le "Warning, no entry point specified". Sauf erreur de ma part, c'est le seul label autorisé pour ce mode de compilation.
Je pense que le "Warning - no stack" apparait parce que tu n'as pas réservé de place (resd xxx, par exemple) dans tes variables - mais c'est pas grave.
Peux-tu également préciser quel type de fichiers exécutables tu veux obtenir (16 bits, 32 bits, PE, mode réel ou virtuel...). Suivant le cas ton exécutable fonctionnera ou pas. Quelle est l'option de format que tu spécifie avec alink ? A+
|
|
mardi 11 avril 2006 à 18:01:03 |
Re : nasm+alink pour un compilateur C

roygrizzly
|
Bonjour,
Merci pour ta réponse rapide. J'obtiens donc le code
section .data a DW 0 section .text ..start: PUSH 5 POP AX MOV [a],AX
int 0x20
si je suit tes conseils et là, il n'y a plus d'erreurs a part le "Warning - no stack". L'exécutable est créé mais il ne fonctionne pas, comme tu l'as dit ce dois être un problème de type, mais je ne connais pas du tout les différences entre les différents types d'exécutables que tu m'a listé. 16 et 32 bits fonctionnent sous WinXP normalement? meme si le 32 est plus conseillé? Tu pourrais m'expliquer ce qu'est PE, mode réel ou virtuel STP. Pour expliquer simplement je veux un exe qui s'éxecute quand je fais "./a.exe" sous cygwin.
Encore merci
|
|
mercredi 12 avril 2006 à 23:55:05 |
Re : nasm+alink pour un compilateur C
|
jeudi 13 avril 2006 à 00:27:31 |
Re : nasm+alink pour un compilateur C
|
jeudi 13 avril 2006 à 08:03:26 |
Re : nasm+alink pour un compilateur C

roygrizzly
|
salut, il y a le message suivant quand je fais un obj puis le liker ./a.exe Impossible d'excuter C:\CYGWIN\HOME\ADMINISTRATEUR\A.EXE
[ORG 0x100] entry: jmp thecode datas: a dw 0 thecode: push 5 pop AX mov [a],AX
nasmw.exe -f bin -o a.com a.asm -> pas d'erreurs ./a.com Impossible d'excuter C:\CYGWIN\HOME\ADMINISTRATEUR\A.COM
alink /? ne fonctionne pas vu que je suis sous cygwin mais alink -h donne:
ALINK v1.6 (C) Copyright 1998-9 Anthony A.J. Williams. All Rights Reserved
Usage: ALINK [file [file [...]]] [options]
Each file may be an object file, a library, or a Win32 resource file. If no extension is specified, .obj is assumed. Modules are only loaded from library files if they are required to match an external reference. Options and files may be listed in any order, all mixed together.
The following options are permitted:
@name Load additional options from response file name -c Enable Case sensitivity -c+ Enable Case sensitivity -c- Disable Case sensitivity -p Enable segment padding -p+ Enable segment padding -p- Disable segment padding -m Enable map file -m+ Enable map file -m- Disable map file ----Press Enter to continue--- -h Display this help list -H " -? " -L ddd Add directory ddd to search list -o name Choose output file name -oXXX Choose output format XXX Available options are: COM - MSDOS COM file EXE - MSDOS EXE file PE - Win32 PE Executable -entry name Use public symbol name as the entry point ----Press Enter to continue--- Options for PE files: -base addr Set base address of image -filealign addr Set section alignment in file -objectalign addr Set section alignment in memory -subsys xxx Set subsystem used Available options are: console Select character mode con " char " windows Select windowing mode win " gui " native Select native mode posix Select POSIX mode -subsysver x.y Select subsystem version x.y -osver x.y Select OS version x.y -stub xxx Use xxx as the MSDOS stub -dll Build DLL instead of EXE -stacksize xxx Set stack size to xxx -stackcommitsize xxx Set stack commit size to xxx -heapsize xxx Set heap size to xxx -heapcommitsize xxx Set heap commit size to xxx
Merci
|
|
lundi 24 avril 2006 à 16:35:35 |
Re : nasm+alink pour un compilateur C

roygrizzly
|
salut, j'aimerai vraiment qu'on me donne une solution parceque je suis toujours bloqué et puis je dois rendre mon projet dans 3 semaines !
je rapelle mon problème : j'ai créé un compilateur qui créé un fichier .asm contenant de l'assembleur et je voudrais faire ./xxx.exe sous CYGWIN pour lancer mon application!!!
Merci!!
|
|
lundi 24 avril 2006 à 17:14:22 |
Re : nasm+alink pour un compilateur C

Nasman
|
Bonjour roygrizzly,
Je ne connais pas CYGWIN mais en effectuant des recherches sur le net j'ai cru comprendre que CYGWIN était un émulateur UNIX. Peut être que cygwin s'attend à trouver un exécutable pour unix (qui tournera avec l'OS du système en fait) et qu'il te jette peut-être à cause de celà. Si c'est celà, je pense qu'il te faudrait créer un exécutable UNIX (ou linux) avec les options -felf et utiliser un autre linker que alink qui ne génère que des exécutables pour DOS ou windows. En espérant que tu trouveras la solution (et que je n'ai pas dit trop de bétises !!!) A+
|
|
vendredi 5 mai 2006 à 16:38:36 |
Re : nasm+alink pour un compilateur C

roygrizzly
|
Réponse acceptée !
Salut, je t'ai envoyé un message en privé pour que tu m'aides à afficher quelque chose à l'écran.
Pour clore la discution au sujet du compilateur, j'ai un code C: int fonction(){ return 5; } int main(){ return fonction(); } qui génère: extern ExitProcess import ExitProcess Kernel32.dll extern MessageBoxA import MessageBoxA user32.dll
segment code public use32 class=CODE ..start: call main pop ax push byte 0 call [ExitProcess] ret ;-------------------------- printf: push byte 0 push dword Titre push dword [esp+4] push byte 0 call [MessageBoxA] ret 12 ;--------------------------
fonction: pop edx ;return 5 PUSH 5 push edx ret
main: pop ecx ;bloc ;return ;appel fonction call fonction pop ax push ax push ecx ret
segment data public use32 class=DATA Titre db "Affichage des messages :",0
Tampon resd 100
et pour compiler et assembler c'est : nasm -fobj a.asm -o a.obj alink -oPE a.obj -o a.EXE
Merci beaucoup pour ton aie, j'ai bien avancé grâce à toi !!
|
|
jeudi 11 mai 2006 à 09:18:54 |
Re : nasm+alink pour un compilateur C

Nasman
|
Bonjour roygrizzly,
J'ai jeté un coup d'oeil au dernier code mis et je me pose quelques questions:
A priori la partie en assembleur ne doit pas faire grand chose à part manipuler les adresses de retour après les call (ces adresses sont restituées néanmoins). Les différents sauts seraient les suivants: Start: saut à main main: saut à fonction fonction: place 5 sur la pile retour à main retour à start, met 5 dans ax et termine avec ExitProcess (+code 0) retour au système
La routine printf n'est pas exécutée ici. A ce propos la MessageBox n'affiche que le Titre (le texte affiché ne contient qu'un zéro terminal). En effet en entrée de printf esp pointe sur l'adresse de retour, le push byte zéro décrémente esp de 4, le push dword Titre décrémente encore esp de 4. Au début de l'instruction push dword [esp+4], esp pointe sur Titre et esp+4 pointe sur byte 0 (en fait c'est un dword 0 qui est pushé). L'argument texte (adresse d'une chaine) est remplacé par zéro. Pour afficher un message placé sur la pile il faut un décalage d'au moins 12 (0xC) car esp pointe sur Titre esp+4 pointe sur byte 0 esp+8 pointe sur adresse de retour esp+12 pointe sur le dernier push avant le call (le message peut s'y trouver).
A+
|
|
Cette discussion est classée dans : code, asm, obj, compilateur, alink
Répondre à ce message
Sujets en rapport avec ce message
probleme de link [nasm + alink] [ par EEkaMouse ]
Salut!j'ai un problème au niveau de l'éditeur de lien.j'ai un programme en *.obj dont la source est la suivante :%include "..\inc\win32n.inc"<br
algo pour jeu de shoot en asm [ par cable ]
Bonjourje suis un jeune débutant en programmation en assembleur et je cherche l'algo (voir le code source) d'un jeu de shoot 'em up en scroling horizo
compilateur? [ par JediMaster ]
j'aimerais savoir qu'elle compilateur vous me conseiller, je suis débutant en asm et je débrouille en C++ je connais 4 compilateur asm ( FASM, C++ BUI
ASM old-style / ASM ancienne méthode [ par TehWan ]
Salut, j'aimerais bien coder en assembly de l'ancienne façon, c'est-à-dire sans aucune procédures, simplement des "labels". (excusez mes anglicismes,
(Debutant en ASM) (MASM) pointeur sur une structure [ par Otaku ]
Salut, voila mon pb, j'aimerai créer une fonction en asm qui reçoit un pointeur sur un élément de type structure, jusque-là pas de pbmais comment modi
Compilateur C/C++ [ par Bombela ]
Salut !Quand on utilise un compilateur C/C++, il est livré avec ses bibliothèque. Maintenant, imaginez que je fasse un os (imaginez seulement), les ro
Variables sour ASM pour 8086 [ par koopje ]
Bonjour à tous,Etudiant, je suis en train de m'exercer avec Emu8086, un émulateur (et assembleur, au passage) d'assembleur sour 8086. J'ai tenté de f
débutant en asm [ par eax ]
salutje débute en asm (avec nasm) et j'arrive pas à assembler mon premier code lolsection .datamsg db 'Hello world$'section .codedebut: lea dx,msg mov
nasm - mémoire read-only [ par Funto66 ]
Bonjour,je suis en train d'écrire des tutoriaux pour le site Coder-Studio (http://www.coder-studio.com/?page=tutoriaux) mais pour la création du tutor
Trouve un compilateur ASM [ par david_paris ]
Bonjour,Je cherche un compilateur ASM, quelqu'un c'est ou je peux trouver un truc dans le genre...David
Livres en rapport
|
Derniers Blogs
WP7 5K BELGIUM CHALLENGEWP7 5K BELGIUM CHALLENGE par junarnoalg
Microsoft Belgique a le plaisir de vous annoncer le lancement du
Challenge Windows Phone 7
. Celui-ci se déroule du 12 juillet au 30 novembre 2010 et vous donne l'opportunit...
Cliquez pour lire la suite de l'article par junarnoalg LES MONADES POUR LES NULSLES MONADES POUR LES NULS par mdufourneaudravel
Avec l'annonce de F#, je me suis intéressé de plus en plus à la programmation fonctionnelle, je suis donc rapidement tombé sur les " monades ", mais malgré la lecture de plusieurs articles, j'étais resté perméable à leur concept. C'est désormais fini, grâ...
Cliquez pour lire la suite de l'article par mdufourneaudravel [WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7 par Audrey
L'émulateur Windows Phone 7, fourni avec la version Beta des outils développeurs n'inclut aucune image dans sa bibliothèque. Pas très pratique de tester son application lorsque l'on souhaite que l'utilisateur puisse choisir une image présente dans le télé...
Cliquez pour lire la suite de l'article par Audrey VIVE LES MOCKS ET LES POCOSVIVE LES MOCKS ET LES POCOS par vLabz
J'observe régulièrement autour de moi de la confusion à propos de ces deux termes et j'aimerais juste rappeler ce qu'ils signifient. Je ne suis bien sûr pas le mieux placé pour faire une leçon mais je vais faire de mon mieux pour mettre en valeur ce q...
Cliquez pour lire la suite de l'article par vLabz [WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5)[WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5) par JeremyJeanson
Vendredi dernier Microsoft a publié le quatrième épisode des bonnes pratiques pour coder ses activités custom dans WF4 : endpoint.tv - Workflow and Custom Activities - Best Practices (Part 4) . Tout comme pour les précédents épisodes, j'ai pris le temps d...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Crystal Report (11)CRYSTAL REPORT (11)Crystal Reports est un outil de reporting souple et puissant, vous pouvez très facilement consult... Cliquez pour télécharger Crystal Report Academy System (12.0.2.0)ACADEMY SYSTEM (12.0.2.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft iPod Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPOD VIDéO CONVERTISSEUR 6 (6.0.3.0419)Xilisoft iPod Vidéo Convertisseur est un outil puissant de conversion d'iPod, facile à utiliser. ... Cliquez pour télécharger Xilisoft iPod Vidéo Convertisseur 6 Xilisoft iPhone Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPHONE VIDéO CONVERTISSEUR 6 (6.0.3.0419)Xilisoft iPhone Vidéo Convertisseur est le meilleur logiciel de conversion iPhone qui peut facile... Cliquez pour télécharger Xilisoft iPhone Vidéo Convertisseur 6 Xilisoft iPad Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPAD VIDéO CONVERTISSEUR 6 (6.0.3.0419)Il s'agit d'un logiciel polyvalent pour convertir les formats vidéo/audio populaires en formats p... Cliquez pour télécharger Xilisoft iPad Vidéo Convertisseur 6
|