У меня проблемы с исследовательским проектом. Я пытаюсь использовать ptrace для наблюдения за выполнением целевого процесса. С помощью ptrace я внедряю системный вызов mprotect в целевой сегмент кода (аналогично точке останова) и устанавливаю защиту стека на PROT_NONE. После этого я восстанавливаю исходные инструкции и позволяю цели продолжаться. Когда я получаю недопустимый segfault разрешения, я снова ввожу системный вызов, чтобы снова снять защиту стека, а затем выполняю инструкцию, вызвавшую segfault, и снова защищаю стек.
(Это действительно работает для простых программ.)
Теперь моя проблема заключается в том, что с этой настройкой цель (красиво) случайным образом падает при вызовах библиотечных функций (независимо от того, использую ли я динамическую или статическую компоновку). Под сбоем я подразумеваю, что он либо пытается получить доступ к памяти, которая по какой-то причине не отображается, либо просто продолжает зависать в функции __lll_lock_wait_private
(которая следовала за вызовом malloc).
Еще раз подчеркну, что сбои происходят не всегда и не всегда происходят в одних и тех же местах.
Это похоже на проблему с синхронизацией, но, насколько я могу судить (имеется в виду, что я просмотрел /proc/pid/tasks/), работает только один поток.
Итак, вы знаете, что может быть причиной этого? Пожалуйста, сообщите мне свои предложения, даже если вы не уверены, у меня заканчиваются идеи ...