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
[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont RE : PIC 16F84RE : PIC 16F84 par belounis
Cliquez pour lire la suite par belounis RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|