GDB временно дает страницам разрешение на запись? - PullRequest
4 голосов
/ 28 сентября 2011

Я отлаживал ошибку сегмента в приложении Linux, которая была вызвана программой, пытающейся изменить структуру массива статических констант (поэтому данные находились в разделе «только для чтения» ELF и впоследствии загружались на страницу, которая была затем разрешение только для чтения).

Находясь в GDB, я поставил точку останова на строке ассемблера, который сделал плохое хранилище, и когда он остановился там, я вручную выполнил эквивалентное действие записи, используя GDB. GDB сделал это без каких-либо претензий, и обратное чтение доказало, что оно действительно было написано. Я посмотрел в / proc / thepid / maps, и эта конкретная страница все еще была помечена как «недоступная для записи».

Итак, мой вопрос: GDB временно устанавливает разрешения на запись на странице только для чтения, выполняет запись, а затем сбрасывает разрешения? Спасибо.

1 Ответ

12 голосов
/ 28 сентября 2011

временно ли GDB устанавливает разрешения на запись

Нет.

В Linux / * 86, ptrace() (это то, что GDB использует для чтения и записи подчиненного файла(будучи отлаженным) память процесса) позволяет выполнять чтение и запись на страницы, которые не могут быть прочитаны / записаны подчиненным, что в точности приводит к путанице, которую вы описали.

Это можно считать ошибкой в ​​ядре.

Следует отметить, что ядро ​​ имеет , чтобы позволить ptrace записывать в нормально недоступный для записи раздел .text, чтобы отладчик мог устанавливать точки останова (что выполняется путем перезаписи исходной инструкции).с инструкцией точки останова / прерывания - int3 через PTRACE_POKETEXT запрос).

Ядро не должно делать то же самое для POKE_DATA, но man ptrace говорит:

PTRACE_POKETEXT, PTRACE_POKEDATA
   Copies the word data to location addr in the child's memory.
   As above, the two requests are currently equivalent.

Я полагаю, что именно эта эквивалентность вызывает текущее поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...