How does the translation from virtual to physical address work for kernel space virtual addresses (VA > 0xFFFF000000000000
) on Windows x64?
I know how it work for user space virtual addresses: the VA is made of multiple indexes in multiple tables, the first one (PML4) being located at the physical address stored in CR3
register (and the process DirectoryTableBase
aka "DirBase" in WinDbg). I guess this is similar for kernel space VA, but where is the PML4 table for them then?
My goal is to parse kernel crash dumps without relying on DbgEng/WinDbg API. I'm already able to tell where each memory page is located in the file, but most fields in the dump file are expressed in kernel space VA. The DirectoryTableBase
field in that file header is related to the user space process which triggered the crash, so it does not help.