Изучение содержимого оперативной памяти

Изучение содержимого оперативной памяти

Я используюредисБаза данных и хотелось бы изучить содержимое оперативной памяти, используемой приложением.

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

Redis — это простое хранилище значений ключей, в котором хранятся двоичные данные. Я думаю, это было бы хорошим местом для изучения таких вещей, как кодирование, и мне было бы интересно заняться такими вещами, как беглый просмотр оперативной памяти в поисках двоичных наборов данных, поиск простых шаблонов; возможно, изучить идею написания языка запросов для младенцев, который бы искал в оперативной памяти.

Эта идея пришла мне в голову после прочтения главы вSICPо языках запросов.

Есть мысли, с чего начать? Для начала я хочу спросить у системы: «Дайте мне адресное пространство, в котором работает это приложение, пожалуйста».

решение1

cat /proc/[pid]/mapsсогласно man-страницам proc.

Похоже на то, что вам нужно. Если вам нужен pid, возьмите его из ps или любого другого инструмента.

Это решает проблему поиска используемого адресного пространства. Один из участников defcon в прошлом году реализовал createremotethread на Linux. Так что вы могли бы сделать это... а затем прочитать произвольную память таким образом.

Кредит дляпсусиза указание на то, что pmap -x [pid]его легче читать.

решение2

Вы можете использовать gdb для доступа к памяти процесса.

Также вам следует взглянуть на файловую систему "/proc" - она ​​содержит псевдофайлы для каждого процесса; некоторые из них могут содержать интересную информацию.

решение3

Используйте отладчик, для этого он и нужен.

Если вы хотите свернуть свой собственный, все это проходит черезptrace.

Вы можете увидеть карту памяти процесса (таблицу содержимого памяти) в /proc/$pid/mapsи прочитать все содержимое памяти из /proc/$pid/mem. Вы не можете просто открыть этот последний файл обычным способом, см.Как читать из /proc/$pid/mem в Linux?

Связанный контент