У меня есть расширение ядра области видимости файла, которое сообщает о демонах при запуске приложения. Демон должен приостанавливать запущенное приложение в начале его первой команды в main().Поиск начала основной функции с помощью ptrace
При вызове ptrace с помощью PT_ATTACH демон появляется слишком рано и находится в динамическом компоновке (dyld).
Вот пример стека вызовов резьбы 0 при прикреплении: -
Thread 0:
0 dyld 0x00007fff6e4cd35e mach_reply_port + 10
1 dyld 0x00007fff6e4cd4d4 _mig_init + 13
2 dyld 0x00007fff6e4cd17f mach_init + 46
3 dyld 0x00007fff6e4aa239 dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 411
4 dyld 0x00007fff6e4aa05e _dyld_start + 54
Поэтому, есть ли способ, чтобы либо обеспечить демон может привязывать к началу основной функции после загрузки библиотек закончили , или многократно на один шаг к этой точке, и в этом случае, как мне удастся найти адрес main, учитывая, что для запущенного приложения не может быть символов?
Спасибо.
Спасибо, но я думаю, что вам не хватает моей точки. Это демон, который я пишу, который должен остановить любое запущенное приложение. Я не могу использовать GDB, а main - возможная точка входа, но мне просто нужно убедиться, что загрузка всех библиотек завершена, и никаких других инструкций не выполняется. Я полностью понимаю, что точка входа будет отличаться по своему адресу, кроме ASLR, каждое приложение будет иметь различный объем памяти. – TheDarkKnight
Если вы ptracing, просто остановите ptrace при каждом системном вызове. Либо это, либо ваша трассированная программа вызовет ptrace_signal, чтобы остановить выполнение там, и пусть ваш демон знает его там. это будет после основной точки входа, и оптимизация может привести к возникновению других вещей между основным() и сигналом. – Magn3s1um
Как выполнить трассировку программы для вызова функции ptrace_signal, чтобы остановить выполнение? Трассируемая программа - любое возможное приложение на компьютере, которое может запускать пользователь, а не тот, который я написал? Извините, я вас не понимаю? – TheDarkKnight