Как мы можем различить разные части памяти процесса?

Я пытаюсь сбросить память процесса и различить разные части, такие как кодовая страница, защитная страница, стек и куча. Я могу сбросить память процесса, вызвав добавочный системный вызов, и в этом системном вызове я использую memmove, чтобы сбросить память процесса в мой буфер. Затем напечатайте буфер в моей функции уровня пользователя. Но я не могу понять другую часть этой памяти. Теперь моя эмбриональная идея состоит в том, чтобы найти некоторые специальные указатели, которые указывают границу этих частей. Но я запутался, какие указатели могут сделать это? Или я должен попытаться вычислить размер этой части и напечатать (Следующая часть - Страница кода / охраны)? Я могу убедиться, что будет таблица страниц 4k для таблицы защитных страниц, но я не знаю, как получить размер других частей, таких как кодовая страница или стек.

Я также хочу, чтобы моя функция уровня пользователя могла выгружать память другого процесса, передавая pid в качестве параметра. Но я запутался, как начать. Как я могу найти таблицу страниц другого процесса и записать их в мою функцию дампа уровня ядра?

1 ответ

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

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

Другие вопросы по тегам