25.10.2014 Views

Architecture des ordinateurs

Architecture des ordinateurs

Architecture des ordinateurs

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Exemples d'appels systèmes POSIX<br />

♦Linux et WinNT sont conformes à la norme POSIX<br />

Exit (sortie de programme) : fonction 1<br />

• void _exit (int code);<br />

MOV EAX, 1 ; fonction système numéro 1 (exit)<br />

MOV EBX, 0 ; le code de retour est 0 (paramètre code)<br />

INT 0x80 ; appel de l'interruption système<br />

Write (Écriture dans un fichier) : fonction 4<br />

• ssize_t write(int fd, const void *buf, size_t count);<br />

Manuel :<br />

• man 2 exit pour avoir la <strong>des</strong>cription de la fonction système<br />

Les fonctions systèmes<br />

♦L'interruption système nous donne accès à toutes les<br />

fonctions de base du système d'exploitation<br />

Exit, read, write, chdir, utime, setitimer,<br />

reboot<br />

♦Beaucoup de fonctions de plus haut niveau existent<br />

Par exemple printf et scanf dans la bibliothèque C : libc<br />

Ces fonctions sont accessibles comme <strong>des</strong> sous-routines<br />

standards (CALL) si la bibliothèque a été liée<br />

2006/2007 Licence ST mention Informatique L3 4-61<br />

2006/2007 Licence ST mention Informatique L3 4-62<br />

Les fonctions de bibliothèque : libc<br />

♦Contrairement aux interruptions<br />

Les paramètres sont empilés dans l'ordre inverse<br />

L'appel à la fonction C se fait avec CALL<br />

♦La valeur de retour est retournée dans EAX (pas<br />

dans la pile)<br />

♦Histoire de convention<br />

Fortran, Basic, Pascal : les sous-routines appelées sont<br />

responsables de dépiler les paramètres<br />

C : Le code appelant doit dépiler les paramètres<br />

2006/2007 Licence ST mention Informatique L3 4-63<br />

Exemple : tolower<br />

♦int tolower (int c);<br />

Converti un caractère c en minuscule<br />

♦En assembleur :<br />

car DD 'A'<br />

extern tolower ; tolower est défini à l'extérieur<br />

PUSH dword [car] ; empile ce caractère (int)<br />

CALL tolower<br />

ADD ESP, 4<br />

; appel la fonction tolower<br />

; dépile le paramètre<br />

♦Pour compiler : nasm -f elf tolower.c<br />

♦Pour lier : ld -o tolower tolower.o /usr/lib/libc.a<br />

EIP=0x8048080<br />

ESP<br />

EIP=0x8048086<br />

ESP<br />

EIP=0x080481F0<br />

ESP<br />

EIP=0x804808B<br />

ESP<br />

pile<br />

pile<br />

0x41<br />

0x00<br />

0x00<br />

2006/2007 Licence ST mention Informatique L3<br />

0x00<br />

4-64<br />

0x41<br />

0x00<br />

0x00<br />

0x00<br />

pile<br />

0x8B<br />

0x80<br />

0x04<br />

0x08<br />

0x41<br />

0x00<br />

0x00<br />

0x00<br />

pile

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!