3

ジェイルブレイクされた iPod Touch 4、iOS (5.1.1) を使用してアプリをデバッグしようとしています。唯一の問題は、GDB がアプリのクラス/セレクター名を認識していないように見えることです。

アドレス ブレークポイントのアタッチと設定は機能しますが、objective-c 名を使用しようとするとシンボルを識別できません。たとえば、break -[Class Selector:]失敗します。(私はそれを認識して+おり、-異なるクラスタイプを表しています。)

また、私はこのアプリのソースを持っておらず、入手できません。

xcodeやソースなしで、デバイス上でGDBを純粋に使用したいと考えています。

以前にこれを成功させた人はいますか?ご回答ありがとうございます。

4

1 に答える 1

3

ストア/リリースビルドからアプリをデバッグしようとしていると仮定すると、バイナリにはコンパイラによってシンボルが削除されます。デバッグ ビルドのみがシンボルを保持します。リリース ビルドがシンボルを保持する理由はありません。

名前を見つけるには、バイナリを手動で逆アセンブルし、そこから必要なものを見つける必要があります。これは非常に長いトピックであり、詳細をここに書き出すには長すぎます (O'Reilly のHacking & Securing iOS Applications book には、適切なステップバイステップのチュートリアルがあります)。

内部的には、Objective-C メッセージング フレームワークは C で構成されてobjc_msgSendいることに注意してください。一連の関数のようなものに慣れていない場合は、それらをよりよく知ることが役立つかもしれません。Objective-C でのすべてのメソッド呼び出しは次を使用して送信objc_msgSendされるため、呼び出されるたびにブレークポイントを設定することで (または、ブレークポイントを設定して内容を自動的にダンプすることで) クラスとメソッドの名前を効果的に把握できます。手動では時間がかかりすぎます)。

ただし、これはシンボル名を識別するのに役立つだけです。シンボルはバイナリから削除されるため、アドレス自体にブレークポイントを設定する必要があります。

于 2013-01-04T23:53:28.070 に答える