Существует ли лучший путь, чем парсинг/proc/self/maps для выяснения защиты памяти?

18
задан Edward KMETT 16 August 2010 в 16:33
поделиться

1 ответ

Я не знаю эквивалент VirtualQuery на Linux. Но некоторые другие способы сделать это, который может или не может работать:

  • Вы устанавливаете обработчик сигналов, захватывающий SIGBUS/SIGSEGV, и продолжаете Ваше чтение или запись. Если память будет защищена, то Ваш код захвата сигнала назовут. Если не Ваш код захвата сигнала не называют. Так или иначе Вы побеждаете.

  • Вы могли отследить каждый раз, когда Вы называете mprotect и создаете соответствующую структуру данных, которая помогает Вам в знании, если регион читается или защищается от записи. Это хорошо, если у Вас есть доступ ко всему коду, который использует mprotect.

  • можно контролировать весь mprotect вызовы в процессе путем соединения кода с библиотекой, переопределяющей функцию mprotect. Можно затем создать необходимую структуру данных для знания, если регион читается или защищается от записи, и затем назовите систему mprotect для того, чтобы действительно установить защиту.

  • можно попытаться использовать /dev/inotify и контролировать файл /proc/self/maps для любого изменения. Я предполагаю, что этот не работает, но должен стоить попытки.

6
ответ дан 30 November 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: