#endif
-int init_emulator(struct guest_info * info) {
+int v3_init_emulator(struct guest_info * info) {
struct emulation_state * emulator = &(info->emulator);
emulator->num_emulated_pages = 0;
}
static addr_t get_new_page() {
- void * page = V3_AllocPages(1);
+ void * page = V3_VAddr(V3_AllocPages(1));
memset(page, 0, PAGE_SIZE);
return (addr_t)page;
uchar_t instr[15];
int ret;
struct emulated_page * data_page = V3_Malloc(sizeof(struct emulated_page));
- addr_t data_addr_offset = PT32_PAGE_OFFSET(read_gva);
+ addr_t data_addr_offset = PAGE_OFFSET(read_gva);
pte32_t saved_pte;
PrintDebug("Emulating Read\n");
}
#ifdef DEBUG_EMULATOR
- PrintDebug("Instr (15 bytes) at %x:\n", instr);
+ PrintDebug("Instr (15 bytes) at %p:\n", (void *)(addr_t)instr);
PrintTraceMemDump(instr, 15);
#endif
*/
data_page->page_addr = get_new_page();
- data_page->va = PT32_PAGE_ADDR(read_gva);
+ data_page->va = PAGE_ADDR(read_gva);
data_page->pte.present = 1;
data_page->pte.writable = 0;
data_page->pte.user_page = 1;
- data_page->pte.page_base_addr = PT32_BASE_ADDR(data_page->page_addr);
+ data_page->pte.page_base_addr = PAGE_BASE_ADDR((addr_t)V3_PAddr((void *)(addr_t)(data_page->page_addr)));
// Read the data directly onto the emulated page
ret = read(read_gpa, (void *)(data_page->page_addr + data_addr_offset), instr_info.op_size, private_data);
if ((ret == -1) || ((uint_t)ret != instr_info.op_size)) {
PrintError("Read error in emulator\n");
- V3_FreePage((void *)(data_page->page_addr));
+ V3_FreePage((void *)V3_PAddr((void *)(data_page->page_addr)));
V3_Free(data_page);
return -1;
}
if (saved_pte.present == 1) {
struct saved_page * saved_data_page = V3_Malloc(sizeof(struct saved_page));
saved_data_page->pte = saved_pte;
- saved_data_page->va = PT32_PAGE_ADDR(read_gva);
+ saved_data_page->va = PAGE_ADDR(read_gva);
list_add(&(saved_data_page->page_list), &(info->emulator.saved_pages));
info->emulator.num_saved_pages++;
int ret;
struct write_region * write_op = V3_Malloc(sizeof(struct write_region ));
struct emulated_page * data_page = V3_Malloc(sizeof(struct emulated_page));
- addr_t data_addr_offset = PT32_PAGE_OFFSET(write_gva);
+ addr_t data_addr_offset = PAGE_OFFSET(write_gva);
pte32_t saved_pte;
int i;
- PrintDebug("Emulating Write for instruction at 0x%x\n",info->rip);
+ PrintDebug("Emulating Write for instruction at 0x%p\n", (void *)(addr_t)(info->rip));
if (info->mem_mode == PHYSICAL_MEM) {
ret = read_guest_pa_memory(info, get_addr_linear(info, info->rip, &(info->segments.cs)), 15, instr);
*/
data_page->page_addr = get_new_page();
- data_page->va = PT32_PAGE_ADDR(write_gva);
+ data_page->va = PAGE_ADDR(write_gva);
data_page->pte.present = 1;
data_page->pte.writable = 1;
data_page->pte.user_page = 1;
- data_page->pte.page_base_addr = PT32_BASE_ADDR(data_page->page_addr);
+ data_page->pte.page_base_addr = PAGE_BASE_ADDR((addr_t)V3_PAddr((void *)(addr_t)(data_page->page_addr)));
if (saved_pte.present == 1) {
struct saved_page * saved_data_page = V3_Malloc(sizeof(struct saved_page));
saved_data_page->pte = saved_pte;
- saved_data_page->va = PT32_PAGE_ADDR(write_gva);
+ saved_data_page->va = PAGE_ADDR(write_gva);
list_add(&(saved_data_page->page_list), &(info->emulator.saved_pages));
info->emulator.num_saved_pages++;
list_for_each_entry_safe(empg, p_empg, &(info->emulator.emulated_pages), page_list) {
pte32_t empte32_t;
- PrintDebug("wiping page %x\n", empg->va);
+ PrintDebug("wiping page %p\n", (void *)(addr_t)(empg->va));
v3_replace_shdw_page32(info, empg->va, &dummy_pte, &empte32_t);
- V3_FreePage((void *)(empg->page_addr));
+ V3_FreePage((void *)(V3_PAddr((void *)(empg->page_addr))));
list_del(&(empg->page_list));
V3_Free(empg);
list_for_each_entry_safe(svpg, p_svpg, &(info->emulator.saved_pages), page_list) {
- PrintDebug("Setting Saved page %x back\n", svpg->va);
+ PrintDebug("Setting Saved page %p back\n", (void *)(addr_t)(svpg->va));
v3_replace_shdw_page32(info, empg->va, &(svpg->pte), &dummy_pte);
list_del(&(svpg->page_list));
//info->rip += info->emulator.instr_length;
- PrintDebug("Returning to rip: 0x%x\n", info->rip);
+ PrintDebug("Returning to rip: 0x%p\n", (void *)(addr_t)(info->rip));
info->emulator.instr_length = 0;