Eksplorowanie zawartości pamięci RAM

12

Korzystam z bazy danych redis i chciałbym poznać zawartość pamięci RAM używanej przez aplikację.

Wydaje mi się, że wyjaśnienie, dlaczego chcę to zrobić, będzie miało więcej sensu niż pytanie, które zadałbym.

Redis to prosty magazyn wartości klucza, w którym przechowywane są dane binarne. Myślę, że byłoby to dobre miejsce do odkrywania takich rzeczy jak kodowanie i byłoby dla mnie interesujące robić rzeczy takie jak przeglądanie pamięci RAM w poszukiwaniu binarnych zestawów danych, takie jak szukanie prostych wzorców; może odkryjesz pomysł napisania dziecięcego języka zapytań wyszukiwanego w pamięci RAM.

Wpadłem na ten pomysł po przeczytaniu rozdziału w SICP na temat języków zapytań.

Masz jakieś przemyślenia, od czego zacząć? Początkowo chcę zapytać system „Podaj mi przestrzeń adresową, w której działa ta aplikacja”.

MageProspero
źródło

Odpowiedzi:

7

Możesz użyć gdb, aby uzyskać dostęp do pamięci procesu.

Powinieneś także rzucić okiem na system plików „/ proc” - zawiera on pseudopliki dla każdego procesu; niektóre z nich mogą zawierać interesujące informacje

jakob
źródło
7

cat /proc/[pid]/maps zgodnie ze stronami proc.

Wygląda jak chcesz. Jeśli potrzebujesz pid, pobierz go z ps lub innego narzędzia.

Dotyczy to znalezienia używanej przestrzeni adresowej. Jeden z kolegów z defcon w ubiegłym roku zaimplementował createremotreadread na Linuksie. Więc możesz to zrobić ... a potem w ten sposób odczytać dowolną pamięć.

Kredyt dla psusi za wskazanie, że pmap -x [pid]jest łatwiejszy do odczytania.

RobotHumans
źródło
3
Pamiętaj, że pmapformatuje te informacje, aby były bardziej czytelne dla człowieka.
psusi
6

Użyj debuggera, po to są.

Jeśli chcesz rzucić własne, wszystko idzie ptrace.

Możesz zobaczyć mapę pamięci procesu (spis treści dla pamięci) /proc/$pid/mapsi odczytać całą zawartość pamięci /proc/$pid/mem. Nie możesz zwyczajnie otworzyć tego drugiego pliku normalnie, zobacz Jak czytać z / proc / $ pid / mem pod Linuksem?

Gilles „SO- przestań być zły”
źródło
1
Byłeś bardzo pomocny w niektórych moich pytaniach. Czy sugerujesz jakieś książki ogólnie związane z systemem operacyjnym Linux lub szczególnie interesujące artykuły internetowe?
MageProspero