Как отладить твики MobileSubstrate? - PullRequest
4 голосов
/ 20 июля 2011

Каков наилучший способ отладки расширений MobileSubstrate, т. Е. Установка точек останова и т. Д.?Есть ли где-нибудь, чтобы сделать это в Xcode?Отладчик GNU?

Ответы [ 3 ]

6 голосов
/ 01 февраля 2012

Я использую системный журнал и хвост. Вам понадобятся syslogd и Erica Utilities от Cydia. Затем на всем протяжении вашей настройки NSLog(@"breakpoint 1 - %@", someObject); и запустите настройку.

tail -f /var/log/syslog
2 голосов
/ 26 июля 2011
#define Debugger() { kill( getpid(), SIGINT ) ; }

Затем вы просто вызываете Debugger () везде, где хотите разместить точку останова.

Вы также можете вызвать исключение, если хотите отследить стек:

[NSException raise:@"Exception Message" format:formatString];
1 голос
/ 23 августа 2014

Mobilesubstrate вводит ваш dylib в целевой процесс. Отладка целевого процесса с использованием GDB или LLDB также отлаживает ваш код расширения. Я покажу вам, как отлаживать расширение Mobilesubstrate, используя GDB. Вот простое расширение Mobilesubstrate / 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

Расширение Mobilesubstrate можно найти с помощью команды:

(gdb) info sharedlibrary 

Эта команда выводит список загруженных модулей, найдите ваше расширение:

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

Вы также можете найти адрес Logos uninstallApplication hook:

(gdb) info functions uninstallApplication

Что выводит это:

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

Вы можете отлаживать функцию ловушки uninstallApplication с помощью точек останова и других функций GDB:

(gdb) b *0x0172cef0+36 

Где смещение 36 - это код операции сборки, который добавляет 7 к переменной i в функции ловушки uninstallApplication. Вы можете продолжить отладку расширения Mobilesubstrate отсюда, как пожелаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...