ホッパーの逆アセンブラはどのように関数の名前が分かりますか?即座にマングルされた関数名のマッピング
たとえば、私はfunction()という簡単なSwift関数を持っています。その関数で実行可能ファイルを逆アセンブルした後、ホッパーはその名前が__T04file8functionyyであることを示しています。私はこれらのシンボルの位置を実行可能ファイルに見つけることができますが、その名前で関数のアドレスをどのようにマップするのかはわかりません。
ホッパーの逆アセンブラはどのように関数の名前が分かりますか?即座にマングルされた関数名のマッピング
たとえば、私はfunction()という簡単なSwift関数を持っています。その関数で実行可能ファイルを逆アセンブルした後、ホッパーはその名前が__T04file8functionyyであることを示しています。私はこれらのシンボルの位置を実行可能ファイルに見つけることができますが、その名前で関数のアドレスをどのようにマップするのかはわかりません。
です: https://github.com/aidansteele/osx-abi-macho-file-format-reference
私の質問への答えはnlist_64という名前の特別な構造体があり、実行可能ファイル内の関数のアドレスとシンボルテーブル内のその関数の変換された名前のインデックスを含んでいます。
名前マングリングの仕様straight from Appleを読むことができます。
あなただけの名前をデマングルする簡単な方法をしたい場合は、ターミナルで次のように入力が:
swift demangle __T04file8functionyy
出力:
_T04file8functionyy ---> filefunction empty-list empty-list
(私はマングルされた名前を提供するかどうかわからないんだけど私は、このマッハ-Oファイル形式の参照を発見した有効)
ありがとうございます。しかし、私はどのように名前のmangling仕事は、それはかなり簡単です質問です。特定のアドレスの関数が同じファイルに格納されている特定の名前を持っていることが分かります。 – hedunky
[this](https://github.com/apple/swift/blob/master/docs/ABI/Mangling.rst)が役立つ場合があります。 – Jester
ホッパーv4を試しましたか?スウィフトコードを自動的に解凍します。だからホッパーで混乱した名前と一緒に使われていない名前を一緒に見ることができます。 – rustyMagnet