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é ...
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.
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.
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