uint64_t get_pdpte_ia32e (vmi_instance_t vmi, addr_t vaddr, uint64_t pml4e) { uint64_t value = 0; addr_t pdpte_address = get_bits_51to12(pml4e) | get_pdpt_index_ia32e(vaddr); dbprint("--PTLookup: pdpte_address = 0x%.16"PRIx64"\n", pdpte_address); vmi_read_64_pa(vmi, pdpte_address, &value); return value; }
static inline uint64_t get_pdpte_ia32e (vmi_instance_t vmi, addr_t vaddr, uint64_t pml4e, addr_t *pdpte_address) { uint64_t value; *pdpte_address = get_bits_51to12(pml4e) | get_pdpt_index_ia32e(vaddr); dbprint(VMI_DEBUG_PTLOOKUP, "--PTLookup: pdpte_address = 0x%.16"PRIx64"\n", *pdpte_address); if(VMI_FAILURE == vmi_read_64_pa(vmi, *pdpte_address, &value)) { value = 0; } return value; }
static inline status_t get_pdpte_ia32e (vmi_instance_t vmi, addr_t vaddr, uint64_t pml4e, addr_t *pdpte_address, uint64_t *pdpte_value) { *pdpte_value = 0; *pdpte_address = (pml4e & VMI_BIT_MASK(12,51)) | get_pdpt_index_ia32e(vaddr); if(VMI_FAILURE == vmi_read_64_pa(vmi, *pdpte_address, pdpte_value)) { dbprint(VMI_DEBUG_PTLOOKUP, "--PTLookup: failed to read pdpte_address = 0x%.16"PRIx64"\n", *pdpte_address); return VMI_FAILURE; } dbprint(VMI_DEBUG_PTLOOKUP, "--PTLookup: pdpte_address = 0x%.16"PRIx64", pdpte_value = 0x%.16"PRIx64"\n", *pdpte_address, *pdpte_value); return VMI_SUCCESS; }