A voir également:
- C asm
- N asm - Télécharger - Édition & Programmation
6 réponses
Comme le faisait remarquer ekra, il est inutile d'utiliser un désassembleur pour obtenir le code assembleur d'un programme dont on possède le code source. En effet, lorsque gcc compile un programme C pour en faire un programme exécutable, il lui fait subir une série de transformations intermédiaires (mais ne le mentionne pas dans la console par défaut, il faut ajouter l'option -v à la ligne de commande pour le voir) :
Code C => Code assembleur => Fichier objet => Programme exécutable
L'option -S dont parle ekra permet d'interrompre la chaîne de compilation une fois le code assembleur généré, et vous récupérez donc ce code assembleur à la fin (dans un fichier portant l'extension .s par défaut).
Un désassembleur permet, à partir d'un programme exécutable, de revenir au code assembleur :
Programme exécutable => Code assembleur
Enfin, pour corriger quelques à priori sur la légalité de l'emploi d'un désassembleur, c'est très simple : Désassembler un programme ne pose de problème que si la license l'interdit (vous savez bien, le truc que personne ne lit jamais quand on installe un programme mais qu'il faut accepter pour continuer ...). Quand il y a écrit quelque part "il vous est interdit de modifier ou désassembler ce programme, ..." vous violez la license si vous le désassemblez. Dans le cas contraire, je ne vois pas pourquoi ça serait interdit ;)
Code C => Code assembleur => Fichier objet => Programme exécutable
L'option -S dont parle ekra permet d'interrompre la chaîne de compilation une fois le code assembleur généré, et vous récupérez donc ce code assembleur à la fin (dans un fichier portant l'extension .s par défaut).
Un désassembleur permet, à partir d'un programme exécutable, de revenir au code assembleur :
Programme exécutable => Code assembleur
Enfin, pour corriger quelques à priori sur la légalité de l'emploi d'un désassembleur, c'est très simple : Désassembler un programme ne pose de problème que si la license l'interdit (vous savez bien, le truc que personne ne lit jamais quand on installe un programme mais qu'il faut accepter pour continuer ...). Quand il y a écrit quelque part "il vous est interdit de modifier ou désassembler ce programme, ..." vous violez la license si vous le désassemblez. Dans le cas contraire, je ne vois pas pourquoi ça serait interdit ;)
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
2 mai 2007 à 00:30
2 mai 2007 à 00:30
Inutile de désasembler ! Vous possédez déjà la source....
Ca ne sert à rien de compiler puis de désassembler. Il faut s'arreter à l'avant derniere étape de la compilation, à la génération du code assembleur.
$ gcc -S helloWorld.c
Zatsit !
Ca ne sert à rien de compiler puis de désassembler. Il faut s'arreter à l'avant derniere étape de la compilation, à la génération du code assembleur.
$ gcc -S helloWorld.c
Zatsit !
Reeter
Messages postés
120
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
6 décembre 2005
25 févr. 2005 à 12:00
25 févr. 2005 à 12:00
lol t'as un TP d'assembleur et tu préfères le faire en C :D
Non, bon sinon, il existe des logiciels qui désassemblent un programme, et qui te sortent le code assembleur... Je sais pas si c tres légal, mais si c toi qui fait le logiciel que tu désassemble, je ne vois pas trop d'inconvénients!
Logiciels: WDasm, PE Dasm, ...
Apres, je peux pas trop t'en dire plus, je m'en suis jamais servi! Au pire mon post aura servi a garder ton thread en première page!! :D
Non, bon sinon, il existe des logiciels qui désassemblent un programme, et qui te sortent le code assembleur... Je sais pas si c tres légal, mais si c toi qui fait le logiciel que tu désassemble, je ne vois pas trop d'inconvénients!
Logiciels: WDasm, PE Dasm, ...
Apres, je peux pas trop t'en dire plus, je m'en suis jamais servi! Au pire mon post aura servi a garder ton thread en première page!! :D
ah nan pas du tout, j'ai pas de TP, mais c'est une question qui me trotte dans la tete, et si c'est possible, j'aimerai savoir l'appliquer...
sinon gdb est un debogger, et il marche exclusivement sur linux..
merci a toi en tout cas Reeter..
sinon, pour le reste du forum, vous en pensez quoi ?
merci d'avance
sinon gdb est un debogger, et il marche exclusivement sur linux..
merci a toi en tout cas Reeter..
sinon, pour le reste du forum, vous en pensez quoi ?
merci d'avance
Reeter
Messages postés
120
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
6 décembre 2005
25 févr. 2005 à 17:43
25 févr. 2005 à 17:43
oui je connais gdb, je disais juste que je ne me suis jamais servi des logiciels que je nommais!
je crois que gdb fonctionne sous zindoze aussi....
je crois que gdb fonctionne sous zindoze aussi....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour, j'ai trouve un moyen avec gcc
bash-2.05b$ cat hw.c
#include <stdio.h>
int main()
{
printf("hello world");
}
bash-2.05b$ gcc -S hw.c
bash-2.05b$ cat hw.s
.file "hw.c"
.section .rodata
.LC0:
.string "hello world"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
subl $12, %esp
pushl $.LC0
call printf
addl $16, %esp
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.4"
bash-2.05b$ nasm hw.s
hw.s:1: error: attempt to define a local label before any non-local labels
hw.s:1: error: parser: instruction expected
hw.s:2: error: attempt to define a local label before any non-local labels
hw.s:2: error: parser: instruction expected
hw.s:3: error: attempt to define a local label before any non-local labels
hw.s:4: error: attempt to define a local label before any non-local labels
hw.s:4: error: parser: instruction expected
hw.s:5: error: attempt to define a local label before any non-local labels
hw.s:6: error: attempt to define a local label before any non-local labels
hw.s:6: error: parser: instruction expected
hw.s:7: error: attempt to define a local label before any non-local labels
hw.s:7: error: parser: instruction expected
hw.s:9: error: parser: instruction expected
hw.s:10: error: parser: instruction expected
hw.s:11: error: parser: instruction expected
hw.s:12: error: parser: instruction expected
hw.s:13: error: symbol `movl' redefined
hw.s:13: error: parser: instruction expected
hw.s:14: error: symbol `subl' redefined
hw.s:14: error: parser: instruction expected
hw.s:15: error: symbol `subl' redefined
hw.s:15: error: parser: instruction expected
hw.s:16: error: symbol `pushl' redefined
hw.s:16: error: parser: instruction expected
hw.s:18: error: parser: instruction expected
hw.s:21: error: parser: instruction expected
hw.s:22: error: parser: instruction expected
hw.s:23: error: parser: instruction expected
On dirait pas que ca donne du code valide, une idee ?
merci d'avance
bash-2.05b$ cat hw.c
#include <stdio.h>
int main()
{
printf("hello world");
}
bash-2.05b$ gcc -S hw.c
bash-2.05b$ cat hw.s
.file "hw.c"
.section .rodata
.LC0:
.string "hello world"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
subl $12, %esp
pushl $.LC0
call printf
addl $16, %esp
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.4"
bash-2.05b$ nasm hw.s
hw.s:1: error: attempt to define a local label before any non-local labels
hw.s:1: error: parser: instruction expected
hw.s:2: error: attempt to define a local label before any non-local labels
hw.s:2: error: parser: instruction expected
hw.s:3: error: attempt to define a local label before any non-local labels
hw.s:4: error: attempt to define a local label before any non-local labels
hw.s:4: error: parser: instruction expected
hw.s:5: error: attempt to define a local label before any non-local labels
hw.s:6: error: attempt to define a local label before any non-local labels
hw.s:6: error: parser: instruction expected
hw.s:7: error: attempt to define a local label before any non-local labels
hw.s:7: error: parser: instruction expected
hw.s:9: error: parser: instruction expected
hw.s:10: error: parser: instruction expected
hw.s:11: error: parser: instruction expected
hw.s:12: error: parser: instruction expected
hw.s:13: error: symbol `movl' redefined
hw.s:13: error: parser: instruction expected
hw.s:14: error: symbol `subl' redefined
hw.s:14: error: parser: instruction expected
hw.s:15: error: symbol `subl' redefined
hw.s:15: error: parser: instruction expected
hw.s:16: error: symbol `pushl' redefined
hw.s:16: error: parser: instruction expected
hw.s:18: error: parser: instruction expected
hw.s:21: error: parser: instruction expected
hw.s:22: error: parser: instruction expected
hw.s:23: error: parser: instruction expected
On dirait pas que ca donne du code valide, une idee ?
merci d'avance
missihafid
Messages postés
59
Date d'inscription
jeudi 29 octobre 2009
Statut
Membre
Dernière intervention
5 avril 2014
24 déc. 2009 à 15:21
24 déc. 2009 à 15:21
bonjour,
moi aussi je cherche à compiler un programme en c à un assembleur 8086.
est ce que je peux utiliser logiciel -WDasm-? mais je ne sais pas où je mets mon programme en c que je veux compiler.
merci à vous.
a+
moi aussi je cherche à compiler un programme en c à un assembleur 8086.
est ce que je peux utiliser logiciel -WDasm-? mais je ne sais pas où je mets mon programme en c que je veux compiler.
merci à vous.
a+