2016-10-25 3 views
2

Supposons que j'ai la fonction fn dans la section .text d'un exécutable ELF64. Est-il possible de savoir à quel offset (en octets) à partir du début du fichier ELF se trouve la fonction fn? Notez que je n'ai pas besoin de savoir à quel VA il a été relocalisé au moment de la liaison, mais sa position dans le fichier ELF.Trouver le décalage de début de la fonction dans ELF

Répondre

2

Généralement oui, si vous pouvez analyser le fichier ELF directement ou combiner la sortie d'outils comme objdump et readelf. Plus spécifiquement: Vous pouvez obtenir le décalage et l'adresse virtuelle de votre section .text avec 'readelf -S fichier' - écrivez-les. En outre vous pouvez lister les symboles avec 'readelf -s fichier', tant que votre exécutable n'est pas dépouillé et que votre fonction est visible (pas statique ou dans un espace de noms anonyme) alors vous devriez trouver votre fonction et l'adresse virtuelle.

Ainsi vous pouvez calculer le décalage par

symbole fn offset = symbole fn VA - .text VA + .text compensé

Cest en supposant que vous voulez le faire "offline" avec commun outils. C'est plus difficile si vous n'avez pas accès au fichier ELF non-stripped, et puisque seulement une partie du fichier ELF reste en mémoire, probablement pas possible sans ajouter quelques informations avec des astuces "offline".