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