@nnGot583
c#, iOS дизассемблирование

_dyld_get_image_vmaddr_slide(0) возвращает неподходящее смещение?

Здравствуйте, возникла проблема во время вызова функции в программе iOS.

Базовый адрес функции, которую я вызываю
6470a1254250c229850972.png


Исходный код dylib'а
#include <unistd.h>
#include <dispatch/dispatch.h>
#include <mach-o/dyld.h>


static bool (*in_Room)();

%ctor {

	in_Room = (bool(*)())(0x1B27CDC + _dyld_get_image_vmaddr_slide(488));

	dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

		while(1)
		{
			sleep(20);
			in_Room();
		}
		
	});
}


Я асинхронно с задержкой вызываю функцию, в момент вызова функции программа завершается:

Вот что показал отладчик из-за этой ошибки:
6470a27f7541d544084321.png


Как я понял, проблема в том, что метод _dyld_get_image_vmaddr_slide вернул не подходящее смещение и из-за этого вызвался неизвестный адрес.
( Вернул смещение 0xda8000, а смещение по которому находится реальный адрес функции в памяти, на тот момент, был 0x11b164000 )

Изменено:

Я предположил что проблема в том, что метод _dyld_get_image_vmaddr_slide находит смещение из неправильной библиотеки, так и оказалось:

Индекс искомой библиотеки был 448 (с учетом встроенной dylib)
6470d2ba013ae840610048.png


Я поменял индекс в коде, но в итоге метод не вернул вообще никакого смещения:

Вызвался чистый базовый адрес функции без смещения:
6470d3269b71a385849529.png
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы