web-dev-qa-db-fra.com

Comment objdump parvient-il à afficher le code source avec l'option -S?

Y a-t-il une référence au fichier source dans le binaire? J'ai essayé d'exécuter des chaînes sur le binaire et je n'ai trouvé aucune référence au fichier source répertorié ...

26
anon

objdump utilise les informations de débogage DWARF compilées dans le binaire, qui fait référence au nom du fichier source. Si le binaire n'est pas compilé avec des informations de débogage, ou que objdump ne peut pas trouver le fichier source, alors vous n'obtenez pas de code source dans votre sortie - uniquement Assembly.

Vous ne voyez pas le nom du fichier source lorsque vous utilisez strings sur le binaire, car DWARF utilise la compression.

29
caf

Les informations naines dans un binaire stockent le mappage entre les instructions (le pointeur d'instruction ou IP en fait) et le fichier source et le numéro de ligne. Le fichier source est spécifié en utilisant le chemin complet afin qu'il puisse être trouvé même si le binaire est déplacé. Pour voir ces informations, vous pouvez utiliser objdump --dwarf=decodedline <binary> (le cours binaire doit être compilé avec -g).

Une fois que vous dites objdump -S <binary> il utilise ces informations naines pour vous donner le code source avec le démontage.

10
vkrnt

Ma compréhension est que pour que objdump affiche le code source du code binaire, il y a une condition préalable: les informations de débogage DWARF doivent être compilées dans le binaire. (par gcc -g sourcefile ou gcc -gdwarf-2 sourcefile) Et en traitant ces informations DWARF objdump est capable d'obtenir le code source comme @ vlcekmi3 et @vkrnt répondu

3
JerseyGood