Exemple de compilation

Slides:



Advertisements
Présentations similaires
Le moteur
Advertisements

Est Ouest Sud 11 1 Nord 1 Howell 6½ et 7 tables 13 rondes – 26 étuis Laval Du Breuil Adstock, Québec Allez à 2 Est-Ouest Allez à 6 Est-Ouest 6 séries détuis.
5 séries d’étuis après la table 8
GEF 243B Programmation informatique appliquée
Approche graphique du nombre dérivé
Les procédures et interruptions en Assembleur (Tasm)
VOTable et lobservatoire virtuel solaire Marco Soldati Haute École Spécialisée de la Suisse de nord-ouest.
Les numéros
1 1 Momentum. 2 2 Tout objet en mouvement continuera son mouvement tant que rien nentrave sa progression.
Est Ouest Sud 11 1 Nord 1 Individuel 13 joueurs 13 rondes - 26 étuis Laval Du Breuil Adstock, Québec Allez à 2 Est I séries détuis entre les tables.
Est Ouest Sud 11 1 Nord 1 RondeNE SO
Est Ouest Sud 11 1 Nord 1 Individuel 20 joueurs 15 rondes - 30 étuis (arc-en-ciel) Laval Du Breuil Adstock, Québec I-20-15ACBLScore S0515 RondeNE
Est Ouest Sud 11 1 Nord 1 Individuel 17 joueurs 12 rondes - 24 étuis Laval Du Breuil Adstock, Québec I série détuis entre chaque table 5 séries.
Est Ouest Sud 11 1 Nord 1 Individuel 23 ou 24 joueurs 12 rondes - 24 étuis Laval Du Breuil Adstock, Québec 2 série détuis entre les tables 2 et 3 1 série.
Est Ouest Sud 11 1 Nord 1 Individuel 19 ou 20 joueurs 12 rondes - 24 étuis Laval Du Breuil Adstock, Québec Rondes 1-6: étuis 1-12 Rondes 7-12: étuis
Est Ouest Sud 11 1 Nord 1 RondeNE SO
Les Prepositions.
GEF 243B Programmation informatique appliquée
Quelle heure est-il? L’heure conversationnelle.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
merci Laurent JEANPIERRE
Assembleur
La pile un élément essentiel
la programmation en langage C
Extensibilité Dynamique dans les Caches Web : une Approche par Aspects
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
Calcul mental 3ème 2 Septembre 2010
Architecture de machines Le microprocesseur
Travaux pratiques sur Nooj
Common Gateway Interface
Collecte de données en ligne
Les verbes auxiliaires Avoir ou être ?? Choisissez! Cest un verbe Dr Mrs Vandertrampp? Cest un verbe réfléchi?
CONJ 1 CE2 Je comprends les notions daction passée, présente, future.
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Système d’exploitation : Assembleur
SIDENA BTS IRIS Session 2008 CARME Arnaud.
Développement d’application web
La Saint-Valentin Par Matt Maxwell.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
SPI - Serial Peripheral Interface
Programmation concurrente
Gilbert TOUT NEST QUE CALCUL Vous vous êtes certainement déjà demandé ce que voulait dire « se donner à 100% » ?
Notre calendrier français MARS 2014
Quelle heure est-il ??. THE TIME: OCLOCK IL EST HEURE IL EST + + HEURES etc.
C'est pour bientôt.....
Veuillez trouver ci-joint
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Modèle pédagogique d’un système d’apprentissage (SA)
Conférence du groupe X- Environnement, 24 avril 2013 L’impact écologique des infrastructures numériques Cédric Gossart Institut Mines-Télécom Télécom Ecole.
Introduction au langage PHP Licence Pro Cours Internet / Intranet Utilité Historique Exemples Fonctions PHP Classes.
Les bases de l’assembleur
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
CALENDRIER-PLAYBOY 2020.
Programmation Système et Réseau (sous Linux)
USAM BRIDGE H O W E L L -CLASSIQUE
6 Nombres et Heures 20 vingt 30 trente 40 quarante.
9 paires séries de 3 étuis ( n° 1 à 27 )
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
Dr. KHERRI Abdenacer 2014/ ECOLE DES HAUTES ETUDES COMMERCIALES.
Les Chiffres Prêts?
Relevez le numéro de votre logo préféré et adressez-le à : En cas d’hésitation, vous pouvez choisir jusqu’à 3 logos. Seront pris.
Introduction à la compilation

Transcription de la présentation:

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

Objectifs Les buts de ce cours sont : Etudier l’architecture x86 Comprendre le fonctionnement du mP Écrire des applications plus performantes

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

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

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

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

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"

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"

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"

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 1 .file "main.c" 2 .intel_syntax 3 .def ___main; .scl 2; .type 32; .endef 4 .section .rdata,"dr" 5 LC0: 6 0000 636F7563 .ascii "coucou\12\0" 6 6F750A00 7 LC1: 8 0008 50415553 .ascii "PAUSE\0" 8 4500 9 000e 0000 .text 10 .align 2 11 .globl _main 12 .def _main; .scl 2; .type 32; .endef 13 _main: 14 0000 55 push ebp 15 0001 89E5 mov ebp, esp 16 0003 83EC08 sub esp, 8 17 0006 83E4F0 and esp, -16 18 0009 B8000000 mov eax, 0 18 00 19 000e 83C00F add eax, 15 20 0011 83C00F add eax, 15 21 0014 C1E804 shr eax, 4 22 0017 C1E004 sal eax, 4 23 001a 8945FC mov DWORD PTR [ebp-4], eax 24 001d 8B45FC mov eax, DWORD PTR [ebp-4] 25 0020 E8000000 call __alloca 25 00 26 0025 E8000000 call ___main 26 00 27 002a C7042400 mov DWORD PTR [esp], OFFSET FLAT:LC0 27 000000 28 0031 E8000000 call _printf 28 00 29 0036 C7042408 mov DWORD PTR [esp], OFFSET FLAT:LC1 29 000000 30 003d E8000000 call _system 30 00 31 0042 B8000000 mov eax, 0 31 00 32 0047 C9 leave 33 0048 C3 ret 34 .def _system; .scl 3; .type 32; .endef 35 0049 90909090 .def _printf; .scl 2; .type 32; .endef 35 909090 GAS LISTING C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s page 2 DEFINED SYMBOLS *ABS*:00000000 main.c C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s:5 .rdata:00000000 LC0 C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s:7 .rdata:00000008 LC1 C:\DOCUME~1\DD\LOCALS~1\Temp/ccysaaaa.s:13 .text:00000000 _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 >$@.lst  info : http://sourceforge.net/forum/message.php?msg_id=3414372

editer main.o.lst … 14 0000 55 push ebp 15 0001 89E5 mov ebp, esp 16 0003 83EC08 sub esp, 8 17 0006 83E4F0 and esp, -16 18 0009 B8000000 mov eax, 0 18 00 19 000e 83C00F add eax, 15 20 0011 83C00F add eax, 15 21 0014 C1E804 shr eax, 4 22 0017 C1E004 sal eax, 4 23 001a 8945FC mov DWORD PTR [ebp-4], eax 24 001d 8B45FC mov eax, DWORD PTR [ebp-4] 25 0020 E8000000 call __alloca

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