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?
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
Linux-Kernel-Dokumentation
Linux-Kernel-Dokument, das das Format beschreibt: Ссылка
%Vor%C-Parser-Funktion
%Vor%Beispiel runnable Programme, die es verwenden:
Tags und Links linux linux-kernel memory-address