Compilateur C, traduire en langage machine

funkeen Messages postés 232 Statut Membre -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'apprend le C et j'aimerais le lancer et voir le langage machine de mon code en C, comment faire ? ( j'ai CODE::BLOCKS)

merci d'avance

A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour, vous pouvez utiliser un désassembler après la compilation, le debugger gdb le fait avec la commande disass.
A la compilation avec gcc vous pouvez générer un fichier asm avec l'option -S je ne sais pas comment y parvenir à partir de codeblocks, le plus simple à faire est de créer un .bat, par exemple pour générer l'asm du fichier main.c dans le .bat j'y met :
c:\mingw\bin\gcc -S main.c
ceci dans un fichier.bat dans le dossier du projet va générer un fichier main.s et dedans il y a le code en assembleur exemple :
	.file	"main.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.section .rdata,"dr"
LC0:
	.ascii "Hello world!\0"
	.text
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	andl	$-16, %esp
	subl	$16, %esp
	call	___main
	movl	$LC0, (%esp)
	call	_puts
	movl	$0, %eax
	leave
	ret
	.def	_puts;	.scl	2;	.type	32;	.endef

Et un .bat pour désassembler après compilation en utilisant gdb :
c:\mingw\bin\gdb bin\Debug\main.exe
cette ligne dans un fichier debug.bat va charger l'executable dans gdb et y a plus qu'à utiliser les commandes, par exemple "disass main" va afficher le code de la fonction main
(gdb) disass main
Dump of assembler code for function main:
   0x00401344 <+0>:     push   %ebp
   0x00401345 <+1>:     mov    %esp,%ebp
   0x00401347 <+3>:     and    $0xfffffff0,%esp
   0x0040134a <+6>:     sub    $0x10,%esp
   0x0040134d <+9>:     call   0x401990 <__main>
   0x00401352 <+14>:    movl   $0x403024,(%esp)
   0x00401359 <+21>:    call   0x401c00 <puts>
   0x0040135e <+26>:    mov    $0x0,%eax
   0x00401363 <+31>:    leave
   0x00401364 <+32>:    ret
End of assembler dump.
(gdb)
1