Adressage, directives assembleur. Jacques Chassin de Kergommeaux (d après X. Rousset)

Documents pareils
Logiciel de base. Première année ENSIMAG

Programmation assembleur : aperçu

Structure d un programme

Architecture des ordinateurs

Les failles Format String

Rappels d architecture

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Département informatique de l université d Angers

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

GlobalScape Secure FTP Server Buffer Overflow

Conception de circuits numériques et architecture des ordinateurs

Les techniques de protection du logiciel

CM2 L architecture MIPS32

Microprocesseur + Logiciel


SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Initiation à la sécurité

Java Licence Professionnelle CISII,

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Résumé Génération de code Le code intermédiaire

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

Compilation (INF 564)

Débogage de code* Mardi 13 décembre Romaric DAVID Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.

Prentice Hall, 2011 (ISBN )

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Algorithmique et Programmation, IMA

Bases de programmation. Cours 5. Structurer les données

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Plan du cours. Historique du langage Nouveautés de Java 7

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Généralités sur le Langage Java et éléments syntaxiques.

as Architecture des Systèmes d Information

4. Initiation à l'assembleur

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Réalisation d un OS 32 bits pour PC(x86)

Traduction des Langages : Le Compilateur Micro Java

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Introduction à l algorithmique et à la programmation M1102 CM n 3

SGM. Master S.T.S. mention informatique, première année. Isabelle Puaut. Septembre Université de Rennes I - IRISA

Architecture des ordinateurs

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Langage Java. Classe de première SI

UE Programmation Impérative Licence 2ème Année

AVERTISSEMENT. D'autre part, toute contrefaçon, plagiat, reproduction encourt une poursuite pénale. LIENS

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Désobfuscation automatique de binaire - The Barbarian Sublimation

Logiciels DSPiy. DSPiyStudio logiciels et format des fichiers. incomplet

Exécution des instructions machine

Utilisation d objets : String et ArrayList

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Chapitre VI- La validation de la composition.

Architecture : Circuits numériques et éléments d architecture

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Jeu d instructions NIOS II

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

Introduction au langage C

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p.

KoinKoin. Système d exploitation à architecture basée micro-noyau. Antoine Castaing Nicolas Clermont Damien Laniel

Conventions d écriture et outils de mise au point

Programmation en langage C

Initiation à l algorithmique

Présentation du langage et premières fonctions

Bases Java - Eclipse / Netbeans

Analyse de sécurité de logiciels système par typage statique

Déprotection semi-automatique de binaire

Principe de fonctionnement des périphériques des ordinateurs en vue de la programmation. Patrick Cégielski

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Une introduction à Java

Langage Fortran (Base)

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Desperate Compressed Code

Solution du challenge SSTIC Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Langage Fortran. Support de cours

2 Comment fonctionne un ordinateur, dans les grandes lignes

UE C avancé cours 1: introduction et révisions

ALGORITHMIQUE ET PROGRAMMATION En C

Programmation en Java IUT GEII (MC-II1) 1

Rappels Entrées -Sorties

Chapitre 2. Classes et objets

Vers du matériel libre

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Systèmes d Exploitation & Machines Virtuelles. Format de l enseignement. Objectif du cours

TP 1. Prise en main du langage Python

TP1. Outils Java Eléments de correction

Cours d initiation à la programmation en C++ Johann Cuenin

HERVÉ SCHAUER CONSULTANTS Cabinet de Consultants en Sécurité Informatique depuis 1989 Spécialisé sur Unix, Windows, TCP/IP et Internet

Les chaînes de caractères

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Tp 1 correction. Structures de données (IF2)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Débuter. sous Linux. Sébastien Blondeel Daniel Cartron Hermantino Singodiwirjo. Avec la contribution de Juliette Risi, Laurent Rathle et Gaël Thomas

ACTIVITÉ DE PROGRAMMATION

Transcription:

Adressage, directives assembleur Jacques Chassin de Kergommeaux (d après X. Rousset) 1

Langage d assemblage Rôle d un langage d assemblage Fournir une représentation symbolique des instructions et des données Proche du langage d une machine Permet d utiliser des étiquettes symboliques pour désigner des emplacements de mémoire 2

Défauts d un langage d assemblage Les programmes sont spécifiques à une machine donnée (non portables). Les programmeurs sont moins productifs, font plus d erreurs. Les programmes sont moins lisibles. Difficile de programmer plus efficacement qu en langage évolué en raison de : L efficacité des compilateurs. La complexité des processeurs (effets de cache, de pipe-line, etc.) 3

Exemples Instructions: iter: cmpw $0,%ax # compare word je fin # jump if equal shrw $1,%ax # shift right word jnc suite # jump if no carry add %dx,%ax # add suite: shlw $1,%dx # shift left word jmp iter # jump inconditionnel fin: Données : toto:.byte 0xff lulu:.int $5000, suite 4

Modèle mémoire (assembleur Gnu) Les directives.text,.data,.section.section.data un:.int 1..section.bss.lcomm tab,10 tab1: skip 10 ---.text main: pushl %ebp Code: text rodata Données Initialisées data Données non Initialisées BSS Pile 5

Programme source Ensemble de sections.data (.rodata,.bss) pour les données.text pour les instructions Chaque section est une suite de lignes Pour les instructions [etiquette:] code_op opérandes Pour les données [etiquette:] def_de_donnée suite de valeurs des commentaires des directives d assemblage 6

Représentation symbolique des instructions Code de l opération La dernière lettre correspond à la longueur des opérandes Exemple : shr, subl, movb Représentation symbolique des opérandes Registre. Ex: %eax Adresse en mémoire, dénotée par un mode d adressage Ex: 4(%ecx) Valeur immédiate Ex: $0x45ab Attention : les types d opérandes valides dépendent des instructions 7

Les commentaires Définition : il s agit de textes non interprétés par l assembleur et qui sont fournis par le programmeur pour augmenter la lisibilité de son programme. Deux possibilités soit sur une ligne tout ce qui suit le caractère # jusqu à la fin de ligne soit comme en C ce qui est entre les deux couples de caractères /* et */ 8

Les étiquettes Une étiquette (identificateur suivi de «:») sert à désigner l adresse d un emplacement de mémoire On peut l utiliser dans un champ opérande toto: movw %eax,lulu 9

Directives d assemblage Directives d'assemblage : commandes fournies par l assembleurs qui ne correspondent à aucune instruction du processeur. Elles permettent entre autres : La définition de données. La définition de constantes ou de symboles. Les sections (.text et.data) 10

Définition de données Définition de données initialisées [étiquette].<dname> val1,val2,, valn <DNAME> = byte hword int quad string xi:.int 0xaabbccdd, xi, -4500 xb:.byte 0x3f, 35, c message:.string "Hello World" Définition de données «non initialisées».lcomm nom, taille [étiquette].skip taille (,valeur) 11

Directives assembleur de définition de données 1.section.data 2 0000 DDCCBBAA xi:.int 0xaabbccdd, xi, -4500 2 00000000 2 6CEEFFFF 3 000c 3F2363 xb:.byte 0x3f, 35, 'c' 4 000f 48656C6C message:.string "Hello World" 4 6F20576F 4 726C6400 5.lcomm tab,10 6.text 7.global main 8 0000 55 main: pushl %ebp 12

Définition de constantes Ressemblent au #define du langage C.equ symbole, expression associe de façon définitive la valeur d'expression au symbole défini par le champ symbole..equ x, 1024 movl $x, %ax. tableau:.skip 400.equ last_elem,.- 4 adresse du dernier élément de tableau.set symbole, expression associe de façon temporaire la valeur d'expression au symbole défini par le champ symbole..set n, 1.set n, n+1 ATTENTION : une constante n est PAS une variable! 13

Exportation de symbole Motivation : pouvoir définir (resp. utiliser) dans un module d assemblage du code et des données utilisables (resp. définis) dans un autre module d assemblage produit par un compilateur ou par un programmeur. Directive.global.global <étiquette>, les étiquettes du champ opérande définies dans le module courant sont rendues visibles à l extérieur de ce module. Toute étiquette référencée dans le module courant sans y être définie est considérée comme externe, donc définie dans un autre module d assemblage. Exemple:.global main # chaque programme comporte un # «main» appelé par le système 14

Mécanismes d adressage 15

Introduction (1) Pourquoi des mécanismes d interprétation d adresses et pas directement les adresses? Réduire la taille des champs d adresse dans les instructions Faciliter l accès à des données structurées (tableaux ou structures) Faciliter le partage d une même machine entre plusieurs utilisateurs. On peut, cependant, avoir directement l adresse! 16

Introduction (2) Position du problème instruction op k adresse primitive Mémoire physique Mécanisme d adressage 17

Adressage registre direct L opération peut porter sur 8, 16 ou 32 bits. Les opérandes doivent avoir la même taille que celle spécifiée dans l instruction : Exemple : syntaxe assembleur GNU (OP source destination) : movl %esp, %ebp movw %ax, %bx movb %al, %ah 18

Adressage immédiat Définition : le champ adresse est utilisé pour représenter la valeur de l opérande. Avantage Pas de gaspillage d'emplacement mémoire Economie d un accès à la mémoire (accès immédiat à la valeur) Inconvénient L opérande représente forcément une constante La taille des constantes représentables est limitée Exemples : movb $0xff, %al movl $toto, %eax # $toto: valeur du symbole toto, # const. ou ad. donnée ou code ATTENTION au $! 19

Adressage direct Mémoire physique Adresse primitive Adresse effective Définition : opérande désigné par son adresse en mémoire Inconvénients : champ adresse de taille importante (32 ou 64 bits). Non modifiable Exemples : movb 0x804943C, %al movl toto, %eax donnée 20

Adressage Indirect Registre R[k] Adresse effective Adresse effective Mémoire physique donnée Un registre contient l adresse de l opérande Notation assembleur GNU : (% Reg). Exemple : movb (%ebx), %al movw (%ebx), %ax movl (%ebx), %eax Attention : (%ebx) désigne un emplacement mémoire! 21

Exemples 4.equ cte,3 6.data 7 0000 05000000 i:.int 5 8 0004 03000000 j:.int 3 9 0008 02000000 k:.int 2 17 0003 B803000000 movl $cte, %eax 18 0008 A108000000 movl k, %eax 19 000d 89C1 movl %eax, %ecx 20 000f B808000000 movl $k, %eax 21 0014 8B08 movl (%eax), %ecx 22

Exemples (suite) (gdb) x /3w &i 0x804952c <i>: 0x00000005 0x00000003 0x00000002 (gdb) x /12b &i 0x804952c <i>: 0x05 0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x8049534 <k>: 0x02 0x00 0x00 0x00 (gdb) x /50xb main 0x8048334 <main>: 0x55 0x89 0xe5 0xb8 0x03 0x00 0x00 0x00 0x804833c <main+8>: 0xa1 0x34 0x95 0x04 0x08 0x89 0xc1 0xb8 0x8048344 <main+16>:0x34 0x95 0x04 0x08 0x8b 0x08 0xc9 0xc3 23

Indirect avec Base Déplacement R[k] Adresse Base Adresse Base Mémoire physique Depl + Notation assembleur GNU : Depl(% Reg) où Depl est une constante signée. Exemple : movb 6 (%ebx), %al Attention : 6(%ebx) désigne un emplacement mémoire! donnée 24

Indirect avec Base, Déplacement, Index R[1] Adresse Base Adresse Base Str Mémoire physique Depl + Index R[2] Depl: TAB R[2] Notation ass. GNU : Depl(%R[1], %R[2]). Déplacement facultatif! Exemple : movl 4(%ebx, %ecx), %eax donnée 25

Indirect avec Base, Déplacement, Index typé R[1] Adresse Base Adresse Base Str Mémoire physique Depl + MUL x Index R[2] donnée Notation ass. GNU : Depl(%R[1], %R[2], MUL). Exemple : movl 4(%eax, %ecx, 4), %ebx movl TAB (%eax, %ecx, 4), %ebx Depl facultatif 26

Adressage mémoire programme Utilisation dans les instructions de branchement jmp Direct : jmp 0x080483cc EIP = 0x080483cc Relatif au registre EIP : jmp etiq (le plus courant dans les programmes simples). Exemple: jmp iter # on ajoute un nombre d octets à # EIP Indirect : Relais = registre : *% Reg Relais = mémoire donnée : cf. adressage opérandes (syntaxe: * devant opérande). * AdRelais : où AdRelais contient l ad. de l inst. 27