Rechercher : dans
Par :

Du C en asm

Dernière réponse le 24 déc 2009 à 15:21:09 kokliko, le 25 fév 2005 à 11:57:20 
 Signaler ce message aux modérateurs

Bonjour tout le monde !

voila, j'aimerai savoir si c'etait possible par un tools ou autre de rendre un code C en asm.
Par exemple gdb, il met vraiment en asm ?

test :

voici un ptit prog c :


---------------------
#include <stdio.h>

int main()
{
printf("hello\n");
}
---------------------

bash-2.05b$ hw
hello
bash-2.05b$ gdb hw
GNU gdb 6.1.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) disassemble main
Dump of assembler code for function main:
0x08048384 <main+0>: push %ebp
0x08048385 <main+1>: mov %esp,%ebp
0x08048387 <main+3>: sub $0x8,%esp
0x0804838a <main+6>: and $0xfffffff0,%esp
0x0804838d <main+9>: mov $0x0,%eax
0x08048392 <main+14>: sub %eax,%esp
0x08048394 <main+16>: sub $0xc,%esp
0x08048397 <main+19>: push $0x8048474
0x0804839c <main+24>: call 0x80482b0 <_init+56>
0x080483a1 <main+29>: add $0x10,%esp
0x080483a4 <main+32>: leave
0x080483a5 <main+33>: ret
0x080483a6 <main+34>: nop
0x080483a7 <main+35>: nop
0x080483a8 <main+36>: nop
0x080483a9 <main+37>: nop
0x080483aa <main+38>: nop
0x080483ab <main+39>: nop
0x080483ac <main+40>: nop
0x080483ad <main+41>: nop
0x080483ae <main+42>: nop
0x080483af <main+43>: nop
---Type <return> to continue, or q <return> to quit---
End of assembler dump.


Si je veux rendre ce petit code en asm, je peux le faire via cet outil ?
Si oui, comment ?
Si non, existe t'il une methode ?


merci de votre comprehension
a+

1

Reeter, le 25 fév 2005 à 12:00:43

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

Répondre à Reeter

2

kokliko, le 25 fév 2005 à 17:33:43

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

Répondre à kokliko

3

Reeter, le 25 fév 2005 à 17:43:24

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....

Répondre à Reeter

4

kokliko, le 4 mar 2005 à 23:27:03

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

Répondre à kokliko

5

me, le 1 mai 2007 à 23:54:50

GCC semble te générer de la syntaxe AT&T alors que NASM ne comprend que la syntaxe Intel. Tu ferais mieux d'utiliser GAS.

Répondre à me

6

ekra, le 2 mai 2007 à 00:30:41

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 ! Ceci est une signature.

Répondre à ekra

11

NewB, le 12 jun 2008 à 23:48:26

Pour avoir le code assembleur avec une syntaxe intel :

gcc -S -masm=intel file.c

le résultat se retrouvera dans file.s

Sinon, pour plus de details se reporter à la doc de gcc.

Répondre à NewB

12

 missihafid, le 24 déc 2009 à 15:21:09

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+

Répondre à missihafid
Collection CommentÇaMarche.net