Comment le désassembleur de trémie comprend-il le nom de la fonction? Par exemple, j'ai une fonction Swift simple appelée function(), et après avoir désassemblé l'exécutable avec cette fonction, Hopper me montre que son nom est __T04file8functionyy. Je peux trouver l'emplacement de ces symboles dans le fichier exécutable, mais je ne peux pas trouver comment il mappe l'adresse de la fonction avec son nom.Correspondance du nom de la fonction mutée Swift
Répondre
Je trouve cette référence de format de fichier Mach-O: https://github.com/aidansteele/osx-abi-macho-file-format-reference
Donc la réponse à ma question est qu'il existe une structure spéciale appelée nlist_64, qui contient l'adresse de la fonction dans l'exécutable et l'index du nom mutilé de cette fonction dans la table de symboles.
Vous pouvez lire les spécifications de modification de nom straight from Apple.
Si vous ne voulez un moyen rapide de demangle le nom, tapez la commande suivante dans le Terminal:
swift demangle __T04file8functionyy
Sortie:
_T04file8functionyy ---> filefunction empty-list empty-list
(Je ne sais pas si le nom fourni mutilée vous est valide)
Merci, mais je ne demande pas comment ça fonctionne, c'est assez simple. Je suis intéressé par où exactement dans l'exécutable nous pouvons trouver qu'une fonction à une adresse spécifique a un nom spécifique, qui est stocké dans le même fichier. – hedunky
Peut-être que [this] (https://github.com/apple/swift/blob/master/docs/ABI/Mangling.rst) aide. – Jester
avez-vous essayé Hopper v4? Il démultiplie automatiquement le code Swift. Donc, vous pouvez voir le nom mutilé et démembré ensemble dans Hopper. – rustyMagnet