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