La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Exemple de compilation Merci à Laurent JEANPIERRE ref :http://asm.sourceforge.net/resources.html#tutorials.

Présentations similaires


Présentation au sujet: "Exemple de compilation Merci à Laurent JEANPIERRE ref :http://asm.sourceforge.net/resources.html#tutorials."— Transcription de la présentation:

1 Exemple de compilation Merci à Laurent JEANPIERRE ref :http://asm.sourceforge.net/resources.html#tutorials

2 Objectifs Les buts de ce cours sont : Etudier larchitecture x86 Comprendre le fonctionnement du P Écrire des applications plus performantes

3 Un long fleuve tranquille C fichier C fichier Compilateur C Code assembleur Assembleur Code objet Linker Code executable Code executable

4 Chaîne de compilation Compiler un langage de haut niveau (C) Source C AssembleurFichier Objet Programme Exécutable Programme Exécutable gcc -Sgcc -cgcc as ld gcc gcc -c gcc

5 Fichiers assembleurs de plusieurs processeurs différents Un même exemple coucou Pour plusieurs compilateurs/processeurs x86, Norme AT&T x86, Norme Intel Alpha Solaris

6 Coucou Langage C coucou.c : #include int main(int argc, char** argv) { printf("Coucou\n"); } Compilation : gcc –b -S coucou.c Source C Assembleur gcc -S

7 coucoux86, Norme AT&T 1.file "coucou.c" 2.section.rodata 3.LC0 : 4.string "Coucou\n" 5.text 6.global main 7.type main, @function 8 main : 9 pushl %ebp 10 movl %esp, %ebp 11 subl $8, %esp 12 andl $-16, %esp 13 movl $0, %eax 14 subl %eax, %esp 15 subl $12, %esp 16 pushl $.LC0 17 call printf 18 addl $16, %esp 19 leave 20 ret 21.size main,.-main 22.section.note.GNU- stack, "", @progbits 23.ident "GCC: (GNU) 3.3.2 20031022"

8 coucou x86, Norme Intel 1.file " coucou.c " 2.intel_syntax 3.section.rodata 4.LC0 : 5.string "Coucou\n" 6.text 7.global main 8.type main, @function 9 main : 10 push %ebp 11 mov %ebp, %esp 12 sub %esp, 8 13 and %esp, -16 14 mov %eax, 0 15 sub %esp, %eax 16 sub %esp, 12 17 push OFFSET FLAT :.LC0 18 call printf 19 add %esp, 16 20 leave 21 ret 22.size main,.-main 23.section.note.GNU- stack, "", @progbits 24.ident "GCC: (GNU) 3.3.2 20031022"

9 coucou Solaris 1.file "hello.c" 2 gcc2_compiled.: 3.section ".rodata" 4.align 8 5.LLC0 : 6.asciz "coucou" 7.section ".text" 8.align 4 9.global main 10.type main, #function 11.proc 020 12 main : 13 !#PROLOGUE# 0 14 save %sp,¡112,%sp 15 !#PROLOGUE# 1 16 sethi %hi (.LLC0), %o1 17 or %o1,%lo (.LLC0), %o0 18 call printf, 0 19 nop 20.LL1 : 21 ret 22 restore 23.LLfe1 : 24.size main,.LLfe1- main 25.ident "GCC: (GNU) 2.7.2.1.f.1"

10 Coucou Langage C avec DEVC++ info : http://sourceforge.net/forum/message.php?msg_id=3414372 dans Options du projet/Fichiers/Surcharge : $(CPP) -c main.c -o main.o $(CXXFLAGS) -Wa,-al,-ah,-as,-L >$@.lst dans Options du projet/Fichiers/Surcharge : $(CPP) -c main.c -o main.o $(CXXFLAGS) -Wa,-al,-ah,-as,-L >$@.lst

11 editer main.o.lst … 14 0000 55 pushebp 15 0001 89E5 movebp, esp 16 0003 83EC08 subesp, 8 17 0006 83E4F0 andesp, -16 18 0009 B8000000 moveax, 0 18 00 19 000e 83C00F addeax, 15 20 0011 83C00F addeax, 15 21 0014 C1E804 shreax, 4 22 0017 C1E004 saleax, 4 23 001a 8945FC movDWORD PTR [ebp-4], eax 24 001d 8B45FC moveax, DWORD PTR [ebp-4] 25 0020 E8000000 call__alloca …

12 DDD l'utilisation de DDD est très utile. http://www.ibisc.fr/%7Edupont/SUPPORTS/DupontCours/SiteProg/ddd/ddd. pdf http://www.dil.univ-mrs.fr/~garreta/generique/autres/UtiliserDDD.html


Télécharger ppt "Exemple de compilation Merci à Laurent JEANPIERRE ref :http://asm.sourceforge.net/resources.html#tutorials."

Présentations similaires


Annonces Google