Mais que fait ce code ?

Et comment ?

a marqué ce sujet comme résolu.

Bonjour,

je vous invite à essayer de comprendre ce merveilleux bout de code C, à compiler sous Linux x86_64:

__attribute__ ((section (".text")))
_start = 0x050F3CB0;

avec la commande :

gcc -ffreestanding -nostdlib main.c

Saurez-vous expliquer le phénomène ?

Édité par @informaticienzero pour ajouter le tag c.

+1 -0

Salut,

je vous invite à essayer de comprendre ce merveilleux bout de code C, à compiler sous Linux x86_64:

__attribute__ ((section (".text")))
_start = 0x050F3CB0;

Skodt

Ça marche pas sous OpenBSD. :-°

$ gcc -ffreestanding -nostdlib main.c
/tmp//ccAUqFml.s: Assembler messages:
/tmp//ccAUqFml.s:3: Warning: ignoring changed section attributes for .text

Sinon, tu sembles essayer de changer le point d’entrée du programme (qui porte le nom _start), sauf que je ne pense pas que cela soit la bonne façon de faire.

+0 -0

Vanadiae est sur la bonne voie. En effet on cherche à ajouter du code au point d’entrée du programme (en l’occurence 4 octets de code). Reste à savoir ce que fait ce code : objdump -D a.out donne:

Déassemblage de la section .text :

0000000000001000 <_start>:
    1000:   b0 3c                   mov    $0x3c,%al
    1002:   0f 05                   syscall 

Concrètement le programme appelle le syscall 0x3c. Un coup d’oeil à la table des syscalls indique que l’on appelle …

sys_exit ! Donc concrètement, le programme ci-dessus ne fait rien :D

Voilà, c’était pour ceux que ça intéresse !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte