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

Présentations similaires


Présentation au sujet: "Exemple de compilation"— 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 l’architecture x86
Comprendre le fonctionnement du mP Écrire des applications plus performantes

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

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

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 <stdio.h>
int main(int argc, char** argv) { printf("Coucou\n"); } Compilation : gcc –b<machine> -S coucou.c gcc -S Source C Assembleur

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

10 Coucou Langage C avec DEVC++
rem : bien mettre main.c et non main.cpp GAS LISTING C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s page 1 file "main.c" intel_syntax def ___main; .scl 2; .type 32; .endef section .rdata,"dr" LC0: F ascii "coucou\12\0" F750A00 LC1: ascii "PAUSE\0" 9 000e text align 2 globl _main def _main; .scl 2; .type 32; .endef _main: push ebp E mov ebp, esp EC sub esp, 8 E4F0 and esp, -16 B mov eax, 0 19 000e 83C00F add eax, 15 C00F add eax, 15 C1E shr eax, 4 C1E sal eax, 4 23 001a 8945FC mov DWORD PTR [ebp-4], eax 24 001d 8B45FC mov eax, DWORD PTR [ebp-4] E call __alloca E call ___main 27 002a C mov DWORD PTR [esp], OFFSET FLAT:LC0 E call _printf C mov DWORD PTR [esp], OFFSET FLAT:LC1 30 003d E call _system B mov eax, 0 C leave C ret def _system; .scl 3; .type 32; .endef def _printf; .scl 2; .type 32; .endef GAS LISTING C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s page 2 DEFINED SYMBOLS *ABS*: main.c C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s: rdata: LC0 C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s: rdata: LC1 C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s: text: _main UNDEFINED SYMBOLS ___main __alloca _system _printf dans Options du projet/Fichiers/Surcharge : $(CPP) -c main.c -o main.o $(CXXFLAGS) -Wa,-al,-ah,-as,-L info :

11 editer main.o.lst … 14 0000 55 push ebp 15 0001 89E5 mov ebp, esp
EC sub esp, 8 E4F0 and esp, -16 B mov eax, 0 19 000e 83C00F add eax, 15 C00F add eax, 15 C1E shr eax, 4 C1E sal eax, 4 23 001a 8945FC mov DWORD PTR [ebp-4], eax 24 001d 8B45FC mov eax, DWORD PTR [ebp-4] E call __alloca

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


Télécharger ppt "Exemple de compilation"

Présentations similaires


Annonces Google