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 отсюда, как пожелаете.