2011-07-20 7 views

答えて

2
#define Debugger() { kill(getpid(), SIGINT) ; } 

次に、ブレークポイントを配置する場所にDebugger()を呼び出します。

あなたがスタックをトレースしたい場合は、例外を発生させることができます。

[NSException raise:@"Exception Message" format:formatString]; 
+0

ブレークポイントを配置したらどうしますか? – Tyilo

6

私は、syslogと尾を使用しています。 CydiaのsyslogdErica Utilitiesが必要です。その後、あなたの微調整の間にNSLog(@"breakpoint 1 - %@", someObject);場所を調整してください。

tail -f /var/log/syslog 
+0

Typo: 'Erica Utilities'。 ; P – Matoe

1

モバイル基板は、あなたのdylibをターゲットプロセスに注入します。 GDBまたはLLDBを使用してターゲットプロセスをデバッグすると、拡張コードもデバッグされます。 GDBを使用してMobilesubstrate拡張機能をデバッグする方法を説明します。ここ は、単純なMobilesubstrate /ロゴスの拡張である:

%hook SBApplicationController 
-(void)uninstallApplication:(id)application { 
    int i = 5; 
    i = i +7; 
    NSLog(@"Hey, we're hooking uninstallApplication: and number: %d", i); 
    %orig; // Call the original implementation of this method 
    return; 
} 
%end 

私は、コンパイルしてインストールするコードを、それにGDBを取り付ける:

yaron-shanis-iPhone:~ root# ps aux | grep -i springboard 
mobile  396 1.6 4.3 423920 21988 ?? Ss 2:19AM 0:05.23 /System/Library/CoreServices/SpringBoard.app/SpringBoard 
root  488 0.0 0.1 273024 364 s000 S+ 2:22AM 0:00.01 grep -i springboard 
yaron-shanis-iPhone:~ root# gdb -p 488 

あなたはコマンドを使用してMobilesubstrate拡張子を見つけることができます

(gdb) info sharedlibrary 

このコマンドは、ロードされたモジュールのリストを出力し、内線番号を探します。

test-debug-substrate.dylib   - 0x172c000   dyld Y Y /Library/MobileSubstrate/DynamicLibraries/test-debug-substrate.dylib at 0x172c000 (offset 0x172c000) 

あなたはまた、ロゴuninstallApplicationフックのアドレスを見つけることができます。

(gdb) info functions uninstallApplication 

これを出力する:

0x0172cef0 _logos_method$_ungrouped$SBApplicationController$uninstallApplication$(SBApplicationController*, objc_selector*, objc_object*) 

あなたはブレークポイントや他のGDBの機能を使用してuninstallApplicationフック関数をデバッグすることができます。

(gdb) b *0x0172cef0+36 

ここで、オフセット36はアセンブリopcodですこれは、uninstallApplicationフック関数のi変数に7を加えたものです。必要に応じてここからMobilesubstrateエクステンションをデバッグし続けることができます。

関連する問題