Проблемы с отладкой Ptrace mprotect - PullRequest
1 голос
/ 14 октября 2011

У меня проблемы с исследовательским проектом. Я пытаюсь использовать ptrace для наблюдения за выполнением целевого процесса. С помощью ptrace я внедряю системный вызов mprotect в целевой сегмент кода (аналог точки останова) и устанавливаю защиту стека в PROT_NONE. После этого я восстановил исходные инструкции и позволил цели продолжить. Когда я получаю недопустимое segfault разрешений, я снова внедряю системный вызов, чтобы снова снять защиту стека, а затем выполняю инструкцию, которая вызвала segfault, и снова защищаю стек.

(Это действительно работает для простых программ.)

Моя проблема сейчас заключается в том, что при такой настройке цель (довольно) случайно падает при вызовах библиотечных функций (независимо от того, использую ли я динамическое или статическое связывание). Под падением я имею в виду, что он либо пытается получить доступ к памяти, которая по какой-то причине не отображается, либо просто продолжает зависать в функции __lll_lock_wait_private (которая следовала за вызовом malloc).

Позвольте мне еще раз подчеркнуть, что сбои не всегда происходят и не всегда происходят в одних и тех же позициях.

Это звучит как проблема синхронизации, но, насколько я могу судить (имеется в виду, что я изучил / proc / pid / tasks /), запущен только один поток.

Так у вас есть какие-либо подсказки, что может быть причиной этого? Пожалуйста, скажите мне ваши предложения, даже если вы не уверены, у меня заканчиваются идеи здесь ...

1 Ответ

1 голос
/ 14 октября 2011

Также возможно, что недетерминизм создается путем рандомизации адресного пространства.Возможно, вы захотите отключить это, чтобы попытаться сделать проблему более детерминированной.

РЕДАКТИРОВАТЬ:

Учитывая, что отключение ASR «решает» проблему, возможно, лежащая в основе проблема может быть:1005 *

  1. Где-то думая, что 0 недействительно, когда оно должно быть действительным, или visversa.(Что у меня было).
  2. Использование адресов из одного прогона против другого прогона?
...