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?
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?
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.
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 ...
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.
Odpowiedzi:
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.
źródło
W Windows dostęp do zawartości pamięci fizycznej można uzyskać poprzez
\Device\PhysicalMemory
obiekt 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/mem
jakoroot
. Zobacz Co to jest / dev / mem? imem(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 ...
źródło
\Device\PhysicalMemory
(odpowiednik/dev/kmem
), podobnie jak narzędzia RAMMap i PhysMem .\DevicePhysicalMemory
obiektu 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.