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 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, 23.ident "GCC: (GNU) "

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 9 main : 10 push %ebp 11 mov %ebp, %esp 12 sub %esp, 8 13 and %esp, mov %eax, 0 15 sub %esp, %eax 16 sub %esp, push OFFSET FLAT :.LC0 18 call printf 19 add %esp, leave 21 ret 22.size main,.-main 23.section.note.GNU- stack, 24.ident "GCC: (GNU) "

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 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) f.1"

10 Coucou Langage C avec DEVC++ info : dans Options du projet/Fichiers/Surcharge : $(CPP) -c main.c -o main.o $(CXXFLAGS) -Wa,-al,-ah,-as,-L dans Options du projet/Fichiers/Surcharge : $(CPP) -c main.c -o main.o $(CXXFLAGS) -Wa,-al,-ah,-as,-L

11 editer main.o.lst … pushebp E5 movebp, esp EC08 subesp, E4F0 andesp, B moveax, e 83C00F addeax, C00F addeax, C1E804 shreax, C1E004 saleax, a 8945FC movDWORD PTR [ebp-4], eax d 8B45FC moveax, DWORD PTR [ebp-4] E call__alloca …

12 DDD l'utilisation de DDD est très utile. pdf


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

Présentations similaires


Annonces Google