2016-12-31 3 views
2

Je compilez un programme très basique "bonjour monde" avec gcc, avec cette ligne de commande:GCC adresse entrypoint

gcc -m32 prog_cible.c -o prog_cible 

Je suis très surpris de l'adresse du point d'entrée:

readelf -h prog_cible 
... 
Entry point: 0x420 

I J'ai désactivé alsr avec cette commande:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space 

Je pense que cela ne peut pas être le vrai point d'entrée. Je suppose qu'une adresse de base est ajoutée à 0x420? Dans le passé, il y a 10 ans, readelf m'a donné le bon point d'entrée. Qu'est-ce qui a changé depuis?

Merci

Répondre

1

Je pense que cela ne peut être le point d'entrée réel.

Vous avez raison. Votre gcc est probablement configuré pour générer des binaires PIE par défaut. PIE binaire est vraiment une forme spéciale d'une bibliothèque partagée.

Si vous regardez le type du binaire (qui readelf -h également imprimé), vous verrez que c'est un DYN, pas EXEC. Vous pouvez désactiver PIE avec gcc -m32 -no-pie ..., et votre point d'entrée ressemblera à 0x8048420.