Nous pouvons définir un point d'arrêt à un func, donc gdb connaît l'adresse d'entrée et de sortie d'une certaine fonction. Mais comment obtient-il cette information? Utilise-t-il DWARF ou readelf pour l'exécutable, si oui, comment? Mercigdb: comment obtient-il les informations de l'exécutable?
1
A
Répondre
1
GDB utilise plusieurs "signaux":
- Il lit la table des symboles.
- Il peut appliquer des heuristiques pour passer le prologue de la fonction passée (en général, vous ne voulez pas vous arrêter dans un prologue de fonction car les paramètres d'appel n'ont peut-être pas encore été configurés).
- Si disponible, il lit également les informations de débogage (qui pourrait être
DWARF
,STABS
ou quelque chose d'autre en fonction de la plate-forme et le compilateur).
Généralement GDB n'appelle pas dans l'exécutable "externe" readelf
- il contient toutes les astuces pour lire les informations directement.
Si vous voulez connaître exactement comment cela est fait, lisez le source.
0
Une fonction est décrite dans DWARF avec un DIE (entrée d'information de débogage) avec l'étiquette DW_TAG_subroutine
. Le DIE a des attributs DW_AT_low_pc
et DW_AT_high_pc
, qui donnent les limites de la fonction.
Dépend de l'architecture et de la chaîne d'outils, mais gdb peut lire les formats DWARF, STABS et d'autres formats. –