vmm_io_hook_t * hook = get_io_hook(&(info->io_map), io_info->port);
uint_t read_size = 0;
- addr_t base_addr = 0;
+ addr_t base_addr = guest_state->es.base ;
addr_t dst_addr = 0;
uint_t rep_num = 1;
ullong_t mask = 0;
- if (info->cpu_mode == REAL) {
- base_addr = (guest_state->es.base << 4);
- } else if (info->cpu_mode == PROTECTED) {
- base_addr = guest_state->es.base;
- }
-
// This is kind of hacky...
// direction can equal either 1 or -1
while (rep_num > 0) {
addr_t host_addr;
- dst_addr = base_addr + (info->vm_regs.rdi & mask);
+ dst_addr = get_addr_linear(info, info->vm_regs.rdi & mask, base_addr);
if (guest_va_to_host_va(info, dst_addr, &host_addr) == -1) {
// either page fault or gpf...
vmm_io_hook_t * hook = get_io_hook(&(info->io_map), io_info->port);
uint_t write_size = 0;
- addr_t base_addr = 0;
+ addr_t base_addr = guest_state->ds.base;
addr_t dst_addr = 0;
uint_t rep_num = 1;
ullong_t mask = 0;
- if (info->cpu_mode == REAL) {
- base_addr = (guest_state->ds.base << 4);
- } else if (info->cpu_mode == PROTECTED) {
- base_addr = guest_state->ds.base;
- }
-
// This is kind of hacky...
// direction can equal either 1 or -1
// We will multiply the final added offset by this value to go the correct direction
while (rep_num > 0) {
addr_t host_addr;
- dst_addr = base_addr + (info->vm_regs.rsi & mask);
+ dst_addr = get_addr_linear(info, (info->vm_regs.rsi & mask), base_addr);
if (guest_va_to_host_va(info, dst_addr, &host_addr) == -1) {
// either page fault or gpf...