4

MobileSubstrate拡張機能をデバッグする、つまりブレークポイントを配置するなどの最良の方法は何ですか?Xcodeでこれを行う方法はありますか?GNUデバッガー?

4

3 に答える 3

6

私はsyslogとtailを使用しています。Cydiaからが必要syslogdになります。Erica Utilities次に、微調整場所全体で微調整NSLog(@"breakpoint 1 - %@", someObject);を実行します。

tail -f /var/log/syslog
于 2012-01-31T23:42:47.737 に答える
2
#define Debugger() { kill( getpid(), SIGINT ) ; }

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

スタックをトレースする場合は、例外を発生させることもできます。

[NSException raise:@"Exception Message" format:formatString];
于 2011-07-26T13:00:10.340 に答える
1

モバイルサブストレートは、dylibをターゲットプロセスに注入します。GDBまたはLLDBを使用してターゲットプロセスをデバッグすると、拡張コードもデバッグされます。GDBを使用してMobilefamilyextensionをデバッグする方法を紹介します。簡単なMobilesubstitution/Logos拡張機能は次のとおりです。

%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

次のコマンドを使用して、モバイルサブストレート拡張機能を見つけることができます。

(gdb) info sharedlibrary 

このコマンドは、ロードされたモジュールのリストを出力し、拡張機能を見つけます。

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

LogosuninstallApplicationフックのアドレスも見つけることができます。

(gdb) info functions uninstallApplication

これを出力します:

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

ブレークポイントやその他のgdb機能を使用してuninstallApplicationフック関数をデバッグできます。

(gdb) b *0x0172cef0+36 

ここで、オフセット36は、uninstallApplicationフック関数のi変数に7を追加するアセンブリオペコードです。必要に応じて、ここからモバイルサブストレート拡張機能のデバッグを続行できます。

于 2014-08-22T22:41:56.077 に答える