概要
今の案件で、どうやら他人が作ったライブラリの中の関数でメモリリークが発生しているようで、色々解析するのに調べたものをつらつらとメモ。
調べる中でメモりたいものをメインにメモっているのでとりとめない+随時更新です。
アーカイブファイル「.a」の中身を確認する
アーカイブファイル(.a
ファイル)などの中身を確認するには、lipo
コマンドを使うことで行えます。
アーキテクチャを確認する
$ lipo -info hoge.a
Architectures in the fat file: hoge.a are: armv7 i386 x86_64 arm64
上のような結果が得られます。
当然、調べるアーカイブファイルによって多少異なります。
上の例では複数アーキテクチャが含まれていることが分かりますね。
(armv7 i386 x86_64 arm64
の4つ)
特定アーキテクチャのもののみを取り出す
また、その中から特定のアーキテクチャのものだけを取り出す場合は以下にようにコマンドを実行します。
$ lipo -thin arm64 hoge.a -output hoge_arm64
対象のオブジェクトファイルを探す
次に、ar
コマンドを使うことで対象アーカイブファイルの中身を確認することが出来ます。
$ ar -t hoge_arm64
__.SYMDEF
QrEncode.o
Unity3DInterface.o
InputSource.o
Types.o
... # 以下略
実行すると上記のように、アーカイブファイル内にまとめられているオブジェクトファイルの一覧を表示することができます。
目的のオブジェクトファイルを見つけたら、以下のようにすることで対象オブジェクトファイルを取り出すことができます。
$ ar -x hoge_arm64 InputSource.o
その他、ar
コマンドを使うことでアーカイブにオブジェクトファイルを追加したり、など様々な処理が行なえます。
詳細についてはこちら→ 「ar - コマンド (プログラム) の説明 - Linux コマンド集 一覧表」
オブジェクトファイルの中身を確認する(ディスアセンブル)
objdump
コマンドを使うことで、オブジェクトファイルをディスアセンブル(disassemble
)することができます。
$ objdump -d InputSorce.o
実行すると標準出力にダーっと内容が出力されます。
ファイルに書き出すことで見やすくなるので、実際にはファイルに書き出すのがいいと思います。
$ objdump -d InputSorce.o > hoge.s
アセンブラについては以前に、(触り程度ですが)記事を書いたので興味があったら読んでみてください。