Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

Du C en asm

kokliko, le vendredi 25 février 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 vendredi 25 février 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 vendredi 25 février 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 vendredi 25 février 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 vendredi 4 mars 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 mardi 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 mercredi 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 jeudi 12 juin 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
DEV C++ ET ASSEMBLEUR!!!!!!!!!!!!!!!!!!!!! Bonjour,voila je debute en c++ j'ai un programme a faire ou je doit combinner entre assembleur et c++ le seul compilateur gratuit que j'ai trouvé c'est le DEV ;ce que j veut savoir est ce possible de travailler avc c++,asm et dev? est ce que //prog... www.commentcamarche.net/forum/affich-5868615-dev-c-et-assembleur
Interfacer du code assembleur et du C Interfacer du code assembleur et du C Introduction Appeler du code assembleur écrit dans un fichier source externe Avec Nasm (x86 uniquement) Compilation/Execution sous Linux Avec Gcc (multiplateforme) Introduction Si, à tout hasard,... www.commentcamarche.net/faq/sujet-8257-interfacer-du-code-assembleur-et-du-c
Convertir asm en c salut Conaissant pas le langage asm Quelqu'un pourrait convertir ce prog en c merci ********************************************************************* ; Ce fichier est la base de départ pour la gestion d'une carte * ; répondant à la norme ISO7816.... www.commentcamarche.net/forum/affich-2453399-convertir-asm-en-c
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ?Depuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appellé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les... www.commentcamarche.net/faq/sujet-16311-3d-secure-verified-by-visa-securecode-qu-est-ce-que-c-est
La compilation et les modules en C et en C++Cet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du... www.commentcamarche.net/faq/sujet-14440-la-compilation-et-les-modules-en-c-et-en-c
[Langage C] C/C++ Erreur de segmentationQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux... www.commentcamarche.net/faq/sujet-4791-langage-c-c-c-erreur-de-segmentation
C'est qoui la meilleur classe sur Dofus??? (Résolu)Bonjour, j'aimerais savoir c'est qoui la meilleur classe sur dofus Perso jaime les race qui tape fors merci de me repondre ^^ www.commentcamarche.net/forum/affich-9679151-c-est-qoui-la-meilleur-classe-sur-dofus
Changer lettre disque c: (Résolu)Bonsoir, J'ai un Windows XP. Mon disque Boot porte la lettre F: au lieu de c: Je sais qu'il y a moyen d'aller dans la registry pour changer la lettre et éviter de refaire une installe Avez vous la solution Merci www.commentcamarche.net/forum/affich-1434396-changer-lettre-disque-c
GPS MIO C 320 (Résolu)bonjour, je viens d acheter un GPS MIO C320. Impossible de le mettre à jour, c'est en anglais. Je n'arrive pas à le synchoniser avec mon ordi. Avez vous la solution. merci yvan www.commentcamarche.net/forum/affich-3241725-gps-mio-c-320
Télécharger Visual C++ 2008 ExpressVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C. www.commentcamarche.net/telecharger/telecharger-34056350-visual-c-2008-express
Télécharger Dev-C++Dev-C++ est un environnement de développement intégré (IDE) en C/C++. Son compilateur est basé sur Mingw de GCC, mais il peut également être utilisé avec CygWin. www.commentcamarche.net/telecharger/telecharger-59-dev-c
Télécharger Labo de formation C#.NetLabo de formation C#.Net représente environ 200h de formation, sous forme d'ateliers comprenant des cours au format pdf, des TD, des TP (plus de 200 exemples, exercices, mini projets sont inclus avec leurs corrections, inclus aussi un QCM de... www.commentcamarche.net/telecharger/telecharger-34058224-labo-de-formation-c-net
Dream multimedia Dreambox DM 600 PVR DVB-CPort Common Interface: , Modulateur RF: , Nombre de prises Péritel (SCART) :1 st, Compatible Dolby Digital, Télétexte, Electronic Program Guide (EPG), Minuteur: , Type de récepteur:DVB-C, Twin Tuners:No, Nombre de cartes acceptées:1, Lecteu www.commentcamarche.net/guide/917028-dream-multimedia-dreambox-dm-600-pvr-dvb-c
Langage C++ - Les types de donnéesLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître... www.commentcamarche.net/contents/cpp/cpptype.php3
Les chaînes de caractères en C++Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une... www.commentcamarche.net/contents/cpp/cppstring.php3
Langage C - Les types de donnéesLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le... www.commentcamarche.net/contents/c/ctype.php3