}
-void v3_print_segments(struct guest_info * info) {
- struct v3_segments * segs = &(info->segments);
+void v3_print_segments(struct v3_segments * segs) {
int i = 0;
struct v3_segment * seg_ptr;
linear_addr = get_addr_linear(info, info->rip, &(info->segments.cs));
V3_Print("RIP Linear: %p\n", (void *)linear_addr);
- v3_print_segments(info);
+ V3_Print("NumExits: %u\n", (uint32_t)info->num_exits);
+
+ v3_print_segments(&(info->segments));
v3_print_ctrl_regs(info);
if (info->shdw_pg_mode == SHADOW_PAGING) {
// CR4
}
v3_print_GPRs(info);
+
+ v3_print_stack(info);
}
linear_addr = get_addr_linear(info, info->vm_regs.rsp, &(info->segments.ss));
-
+
+ V3_Print("Stack at %p:\n", (void *)linear_addr);
+
if (info->mem_mode == PHYSICAL_MEM) {
- guest_pa_to_host_va(info, linear_addr, &host_addr);
+ if (guest_pa_to_host_va(info, linear_addr, &host_addr) == -1) {
+ PrintError("Could not translate Stack address\n");
+ return;
+ }
} else if (info->mem_mode == VIRTUAL_MEM) {
- guest_va_to_host_va(info, linear_addr, &host_addr);
+ if (guest_va_to_host_va(info, linear_addr, &host_addr) == -1) {
+ PrintError("Could not translate Virtual Stack address\n");
+ return;
+ }
}
- V3_Print("Host Address of rsp = 0x%p\n", (void *)host_addr);
- V3_Print("Stack at %p:\n", (void *)host_addr);
-
+ V3_Print("Host Address of rsp = 0x%p\n", (void *)host_addr);
+
// We start i at one because the current stack pointer points to an unused stack element
for (i = 0; i <= 24; i++) {
if (cpu_mode == LONG) {