2012-02-21 8 views
3

シンボルテーブルのないデバッグとiPhoneアプリです。デバイスはjailbrokenであり、pidを渡すことでgdbをローカルにデバイスに接続しています(gdbのアプリケーションの起動はiOS 5では動作しません)。私が設定したブレークポイントはどれもトリガーされていません。ブレークポイントはクラスダンプからのオフセットに設定しましたが、iOS 5のASLRのためにヒットしないと思います。正しく行われました。ただし、変更後、アプリケーションは起動しなくなります。iphoneデバイスのgdbがブレークポイントで停止しない

ブレークポイントを間違って設定していますか?これはASLRのためですか?ランダム化の場合、デバイス上でどのように効果的に無効にするのですか?

答えて

1

GDBでアプリケーションをデバッグするだけであれば、MH_PIEフラグでASLRを無効にするだけで問題ありません。そのプログラムはバイナリにパッチを当てているので、あなたはアプリを辞任する必要があります。 ldidというプログラム(Cydiaの「Link Identity Editor」というパッケージから)を使って、アプリケーションを擬似コードすることができます。

root# cd /var/mobile/Applications/*/Example.app/ 
root# mach_flags --no-pie Example 
root# ldid -s Example 
root# gdb 
(gdb) attach -waitfor Example 

次に、アプリのアイコンをタップします。アプリがハングアップするように見えます。この時点から、GDBに戻り、ロードする必要があります。さて、ブレークポイントをb *0x<address>に設定するだけで、ASLRを無効にすることができます。

-1

私はちょうどこれにもこだわりました。私が見つけることができる簡単な修正はありません。今まで見つかった最良の回避策はassert.hをインクルードして使用することです。

更新:

あなたはそうです。自分のソースを持っていると思っていました。しかし、iOSのjail壊れたデバイスのgdbには、ブレークポイントに当たらないというこの既知の問題があります。私はもともとgdbをCydiaに持ってきた人たちとこの問題について話し合いました。彼らは自分自身で問題を解決しようと勧めました。自由時間がなければ、私は今はあきらめました。

jailが壊れたiOS上でgdb経由でデバッグしようとすると、自分自身で問題を調べたり、あきらめたりすることを警告します。あなたが自分のソースで作業していて、誰か他の人のアプリケーションをリバースエンジニアリングしようとしていない場合、アサーションを使うことは一番良いことです。

私は手元にある質問に答えようとしていなかったので、私は実際に下垂体に値する。しかし、情報は関係なくそこに出なければならない。

+0

彼はアプリケーションのソースを持っていないので、どのようにassert.hをインクルードしますか?これは質問に答えません。 – C0deH4cker

関連する問題