Swift 损坏的函数名称映射

Swift mangled function name mapping

Hopper 反汇编程序如何理解函数的名称?

例如,我有一个名为 function() 的简单 Swift 函数,在使用该函数反汇编可执行文件后,Hopper 向我显示它的错位名称是 __T04file8functionyy。我可以在可执行文件中找到这些符号的位置,但我找不到它如何将函数地址与其名称映射。

您可以阅读名称修改规范 straight from Apple

如果您只想快速地分解名称,请在终端中键入以下内容:

swift demangle __T04file8functionyy

输出:

_T04file8functionyy ---> filefunction empty-list  empty-list 

(我不确定你提供的乱七八糟的名字是否有效)

我找到了这个 Mach-O 文件格式参考: https://github.com/aidansteele/osx-abi-macho-file-format-reference

所以我的问题的答案是有一个叫做nlist_64的特殊结构,它包含executable中函数的地址以及符号 table.

中该函数的损坏名称的索引