Jak zobaczyć zawartość pamięci RAM? [Zamknięte]

14

Czy jest jakiś sposób, aby zobaczyć zawartość pamięci RAM? Od pierwszego bajtu do ostatniego. Chciałbym zobaczyć, gdzie system operacyjny i wszystkie uruchomione na nim procesy znajdują się w pamięci RAM. czy to możliwe?

osta
źródło
1
Jako proces użytkownika w chronionym środowisku pamięci masz dostęp tylko do kopii użytkownika jego wirtualnej przestrzeni pamięci. Pamięć jądra, pamięć wirtualna innych użytkowników i nieużywana pamięć fizyczna są chronione przed wścibskimi oczami. Z drugiej strony, losowa migawka fizycznej pamięci SDRAM nie będzie wiele znaczyła, o ile nie znasz mapowań pamięci wirtualnej.
trociny
Pamięć o dostępie losowym? Więc tabela alokacji stron?
ta.speot.is
Co dokładnie próbujesz osiągnąć? meta.stackexchange.com/questions/66377/what-is-the-xy-problem
bwDraco
Prawdopodobnie byłbyś znacznie szczęśliwszy z jakimś narzędziem, które pokazuje, jak pamięć jest przydzielana, zamiast patrzeć na 1 i 0.
Daniel R Hicks,
1
to było po prostu z ciekawości
osta

Odpowiedzi:

8

Możesz użyć debugera jądra, który pozwoliłby na „surowy” dostęp do pamięci, taki jak SoftICE dla Windows . Możesz także skonfigurować GDB, aby działał jako debugger dla jądra Linux . Jeśli maszyna wirtualna jest opcją, niektóre oprogramowanie do wirtualizacji obsługuje zapisywanie stanu maszyny (w tym pamięci RAM) na dysku, który można następnie poddać dalszej analizie . Należy jednak zauważyć, że większość „nowoczesnych” systemów operacyjnych korzysta z randomizacji układu przestrzeni adresowej (ASLR). Prawdziwa fizyczna mapa pamięci systemu jest celowo podzielona na fragmenty, aby złagodzić różne problemy związane z bezpieczeństwem i exploity (np. Przepełnienie bufora stosu / sterty ).

Jednak dla danego programu działającego w nowoczesnym systemie operacyjnym można uzyskać logiczną mapę pamięci dla danego procesu / wątku - o ile masz odpowiednie symbole debugowania i debuggera. Jeśli potrzebujesz ogólnego widoku, jeśli oprogramowanie / sprzęt wykorzystuje pamięć wirtualną , sytuacja staje się znacznie bardziej złożona. Ponownie jednak, jeśli dosłownie chcesz tego, co jest właśnie w pamięci RAM, zobacz pierwszy akapit.

Przełom
źródło
9

W Windows dostęp do zawartości pamięci fizycznej można uzyskać poprzez \Device\PhysicalMemoryobiekt w Menedżerze obiektów . Wymaga to dostępu do systemu na poziomie jądra, co oznacza, że ​​aby uzyskać dostęp do tego obiektu, należy zainstalować program, najprawdopodobniej sterownik trybu jądra.

W systemie Linux zawartość pamięci fizycznej można uzyskać bezpośrednio jako dane binarne, czytając /dev/memjako root. Zobacz Co to jest / dev / mem? i mem(4)stronę podręcznika, aby uzyskać więcej informacji.

Nie jestem pewien, dlaczego musisz ustalić lokalizację systemu operacyjnego i procesów w pamięci fizycznej, ale ...

bwDraco
źródło
3
W systemie Windows można faktycznie otworzyć \Device\PhysicalMemory(odpowiednik /dev/kmem), podobnie jak narzędzia RAMMap i PhysMem .
user1686
1
Nigdy więcej. Począwszy od Server 2003 i we wszystkich późniejszych wersjach \DevicePhysicalMemoryobiektu nie można otworzyć z trybu użytkownika. RAMmap i większość innych narzędzi sysinternals zawiera sterownik trybu jądra, który wykonuje tę część swojej pracy.
Jamie Hanrahan,