Wie dekodieren / proc / pid / pagemap Einträge in Linux?

8

Ich versuche zu entschlüsseln, wie man / proc / pid / pagemap benutzt, um die physikalische Adresse eines bestimmten Satzes von Seiten zu erhalten. Angenommen, aus der / proc / pid / maps erhalte ich die virtuelle Adresse afa2d000-afa42000, die dem Heap entspricht. Meine Frage ist, wie verwende ich diese Informationen, um die pagmap-Datei zu durchlaufen und finde die physischen Seitenrahmen, die der Adresse afa2d000-afa42000 entsprechen.

Der Eintrag / proc / pid / pagemap ist im Binärformat. Gibt es irgendwelche Tools, um die Analyse dieser Datei zu erleichtern?

    
Naruto 10.06.2013, 09:57
quelle

4 Antworten

2

Versuchen Sie es Ссылка Es kann die PageMap für Sie analysieren, zum Beispiel, wenn die virtuelle Adresse Sie interessiert sich für den Heap, der 0x055468 ist: = 0004c000-0005a000 rw-p 00000000 00:00 0 [Haufen] : 86000000000FD6D6 : 0600000000000000
: 0600000000000000
: 86000000000FE921
: 86000000000FE922
: 0600000000000000
: 86000000000FD5AD
: 86000000000FD6D4
: 86000000000FD5F8
: 86000000000FD5FA = & gt; 9.

Nehmen Sie die Seitengröße als 4KB und (0x055468 - 0x4c000) mod 4K = 9, Die Seitenrahmennummer Ihrer Seite ist also die 9. Seitenrahmen  == & gt; : 86000000000FD5FA Also ist die physische PFN 0xFD5FA000 (nimm die letzte 55 Bit und mal Seitengröße) plus der Offset: (0x055468 - 0x4c000 - 9 * 4K) = 0x468 == & gt; Die physikalische Adresse ist 0xFD5FA000 + 0x468 = 0xFD5FA468

    
I Chun Lin 02.07.2013, 06:45
quelle
3

Ich hoffe, dass dieser Link helfen wird. Es ist ein sehr einfaches Tool, und das Bestimmen der Adresse, auf die Sie zugreifen müssen, ist sehr einfach: Ссылка

    
Dmitry 01.03.2014 08:48
quelle
1

Linux-Kernel-Dokumentation

Linux-Kernel-Dokument, das das Format beschreibt: Ссылка

%Vor%

C-Parser-Funktion

GitHub-Upstream .

%Vor%

Beispiel runnable Programme, die es verwenden:

quelle
0

Falls Leute das von Rust aus tun wollen, habe ich eine Rust-Implementierung hinzugefügt, damit Sie einfach durch /proc/$pid/maps und /proc/$pid/pagemap navigieren können: Ссылка

    
mpierce 04.02.2018 23:01
quelle