LoginSignup
1
2

More than 5 years have passed since last update.

[iOS] 使用しているライブラリの情報を色々得るためのメモ

Posted at

概要

今の案件で、どうやら他人が作ったライブラリの中の関数でメモリリークが発生しているようで、色々解析するのに調べたものをつらつらとメモ。

調べる中でメモりたいものをメインにメモっているのでとりとめない+随時更新です。

アーカイブファイル「.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

アセンブラについては以前に、(触り程度ですが)記事を書いたので興味があったら読んでみてください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2