Stackdb
Stackdb is a stackable, multi-target and -level source debugger and memory forensics library.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Macros | Functions | Variables
target_xen_vm.c File Reference
#include "config.h"
#include <errno.h>
#include <assert.h>
#include <ctype.h>
#include <unistd.h>
#include <getopt.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <libgen.h>
#include <endian.h>
#include <gelf.h>
#include <elf.h>
#include <libelf.h>
#include <argp.h>
#include "common.h"
#include "glib_wrapper.h"
#include "object.h"
#include "arch.h"
#include "arch_x86.h"
#include "arch_x86_64.h"
#include "evloop.h"
#include "binfile.h"
#include "dwdebug.h"
#include "dwdebug_priv.h"
#include "target_api.h"
#include "target.h"
#include "target_event.h"
#include "target_arch_x86.h"
#include "target_os.h"
#include "probe_api.h"
#include <xenctrl.h>
#include <xs.h>
#include "target_xen_vm.h"
#include "target_xen_vm_vmp.h"
Include dependency graph for target_xen_vm.c:

Go to the source code of this file.

Macros

#define UNIX_PATH_MAX   (size_t)sizeof(((struct sockaddr_un *) 0)->sun_path)
 
#define RF   "x"
 
#define DRF   "lx"
 
#define XC_IF_INVALID   (-1)
 
#define XV_ARGP_USE_XENACCESS   0x550001
 
#define XV_ARGP_USE_LIBVMI   0x550002
 
#define XV_ARGP_CLEAR_MEM_CACHES   0x550003
 
#define XV_ARGP_MEMCACHE_MMAP_SIZE   0x550004
 
#define XV_ARGP_HIUE   0x550005
 
#define XV_ARGP_REPLAYDIR   0x550006
 

Functions

struct targetxen_vm_instantiate (struct target_spec *spec, struct evloop *evloop)
 
int xen_vm_attach_overlay_thread (struct target *base, struct target *overlay, tid_t newtid)
 
int xen_vm_detach_overlay_thread (struct target *base, struct target *overlay, tid_t tid)
 
int xen_vm_attach_evloop (struct target *target, struct evloop *evloop)
 
int xen_vm_detach_evloop (struct target *target)
 
int xen_vm_disable_hw_breakpoints (struct target *target, tid_t tid)
 
int xen_vm_enable_hw_breakpoints (struct target *target, tid_t tid)
 
int xen_vm_disable_hw_breakpoint (struct target *target, tid_t tid, REG dreg)
 
int xen_vm_enable_hw_breakpoint (struct target *target, tid_t tid, REG dreg)
 
int xen_vm_notify_sw_breakpoint (struct target *target, ADDR addr, int notification)
 
int xen_vm_singlestep (struct target *target, tid_t tid, int isbp, struct target *overlay)
 
int xen_vm_singlestep_end (struct target *target, tid_t tid, struct target *overlay)
 
uint64_t xen_vm_get_tsc (struct target *target)
 
uint64_t xen_vm_get_time (struct target *target)
 
uint64_t xen_vm_get_counter (struct target *target)
 
int xen_vm_enable_feature (struct target *target, int feature, void *arg)
 
int xen_vm_disable_feature (struct target *target, int feature)
 
int xen_vm_instr_can_switch_context (struct target *target, ADDR addr)
 
int __xen_vm_vcpu_to_thread_regcache (struct target *target, struct vcpu_guest_context *context, struct target_thread *tthread, thread_ctxt_t tctxt)
 
int __xen_vm_thread_regcache_to_vcpu (struct target *target, struct target_thread *tthread, thread_ctxt_t tctxt, struct vcpu_guest_context *context)
 
int xen_vm_spec_to_argv (struct target_spec *spec, int *argc, char ***argv)
 
error_t xen_vm_argp_parse_opt (int key, char *arg, struct argp_state *state)
 
struct xen_vm_specxen_vm_build_spec (void)
 
void xen_vm_free_spec (struct xen_vm_spec *xspec)
 
int xen_vm_xc_attach (int *xc_handle, int *xce_handle)
 
int xen_vm_xc_detach (int *xc_handle, int *xce_handle)
 
int xen_vm_virq_attach (int xce_handle, XC_EVTCHN_PORT_T *dbg_port)
 
int xen_vm_virq_detach (int xce_handle, XC_EVTCHN_PORT_T *dbg_port)
 
int xen_vm_vmp_attach (char *path, int *cfd, char **cpath)
 
int xen_vm_vmp_detach (int *cfd, char **cpath)
 
int xen_vm_vmp_launch ()
 
int xen_vm_virq_or_vmp_attach_or_launch (struct target *target)
 
int xen_vm_virq_or_vmp_detach (struct target *target)
 
int xen_vm_virq_or_vmp_get_fd (struct target *target)
 
int xen_vm_virq_or_vmp_read (struct target *target, int *vmid)
 
int xen_vm_evloop_handler (int readfd, int fdtype, void *state)
 
unsigned char * xen_vm_read_pid (struct target *target, tid_t tid, ADDR vaddr, unsigned long length, unsigned char *buf)
 
unsigned long xen_vm_write_pid (struct target *target, tid_t tid, ADDR vaddr, unsigned long length, unsigned char *buf)
 
int __xen_vm_thread_regcache_to_vcpu_64_reg_h (struct target *target, struct target_thread *tthread, thread_ctxt_t tctxt, REG reg, REGVAL regval, void *priv)
 
int __xen_vm_thread_regcache_to_vcpu_64_raw_h (struct target *target, struct target_thread *tthread, thread_ctxt_t tctxt, REG reg, void *rawval, int rawlen, void *priv)
 
int __xen_vm_thread_regcache_to_vcpu_32_reg_h (struct target *target, struct target_thread *tthread, thread_ctxt_t tctxt, REG reg, REGVAL regval, void *priv)
 
int __xen_vm_thread_regcache_to_vcpu_32_raw_h (struct target *target, struct target_thread *tthread, thread_ctxt_t tctxt, REG reg, void *rawval, int rawlen, void *priv)
 

Variables

struct xen_vm_mem_ops xen_vm_mem_ops_builtin
 
int xc_handle = -1
 
int xce_handle_fd = -1
 
struct target_ops xen_vm_ops
 
struct argp_option xen_vm_argp_opts []
 
struct argp xen_vm_argp
 
char * xen_vm_argp_header = "Xen Backend Options"
 

Macro Definition Documentation

#define DRF   "lx"

Definition at line 229 of file target_xen_vm.c.

#define RF   "x"

Definition at line 228 of file target_xen_vm.c.

#define UNIX_PATH_MAX   (size_t)sizeof(((struct sockaddr_un *) 0)->sun_path)

Definition at line 33 of file target_xen_vm.c.

#define XC_IF_INVALID   (-1)

Definition at line 263 of file target_xen_vm.c.

#define XV_ARGP_CLEAR_MEM_CACHES   0x550003

Definition at line 358 of file target_xen_vm.c.

#define XV_ARGP_HIUE   0x550005

Definition at line 360 of file target_xen_vm.c.

#define XV_ARGP_MEMCACHE_MMAP_SIZE   0x550004

Definition at line 359 of file target_xen_vm.c.

#define XV_ARGP_REPLAYDIR   0x550006

Definition at line 361 of file target_xen_vm.c.

#define XV_ARGP_USE_LIBVMI   0x550002

Definition at line 357 of file target_xen_vm.c.

#define XV_ARGP_USE_XENACCESS   0x550001

Definition at line 356 of file target_xen_vm.c.

Function Documentation

int __xen_vm_thread_regcache_to_vcpu ( struct target target,
struct target_thread tthread,
thread_ctxt_t  tctxt,
struct vcpu_guest_context *  context 
)

Definition at line 5163 of file target_xen_vm.c.

int __xen_vm_thread_regcache_to_vcpu_32_raw_h ( struct target target,
struct target_thread tthread,
thread_ctxt_t  tctxt,
REG  reg,
void *  rawval,
int  rawlen,
void *  priv 
)

Definition at line 5133 of file target_xen_vm.c.

int __xen_vm_thread_regcache_to_vcpu_32_reg_h ( struct target target,
struct target_thread tthread,
thread_ctxt_t  tctxt,
REG  reg,
REGVAL  regval,
void *  priv 
)

Definition at line 5102 of file target_xen_vm.c.

int __xen_vm_thread_regcache_to_vcpu_64_raw_h ( struct target target,
struct target_thread tthread,
thread_ctxt_t  tctxt,
REG  reg,
void *  rawval,
int  rawlen,
void *  priv 
)

Definition at line 5072 of file target_xen_vm.c.

int __xen_vm_thread_regcache_to_vcpu_64_reg_h ( struct target target,
struct target_thread tthread,
thread_ctxt_t  tctxt,
REG  reg,
REGVAL  regval,
void *  priv 
)

Definition at line 5036 of file target_xen_vm.c.

int __xen_vm_vcpu_to_thread_regcache ( struct target target,
struct vcpu_guest_context *  context,
struct target_thread tthread,
thread_ctxt_t  tctxt 
)

Definition at line 4975 of file target_xen_vm.c.

error_t xen_vm_argp_parse_opt ( int  key,
char *  arg,
struct argp_state *  state 
)

Definition at line 501 of file target_xen_vm.c.

int xen_vm_attach_evloop ( struct target target,
struct evloop evloop 
)

Definition at line 4443 of file target_xen_vm.c.

int xen_vm_attach_overlay_thread ( struct target base,
struct target overlay,
tid_t  newtid 
)

Definition at line 2832 of file target_xen_vm.c.

struct xen_vm_spec* xen_vm_build_spec ( void  )

Definition at line 640 of file target_xen_vm.c.

int xen_vm_detach_evloop ( struct target target)

Definition at line 4467 of file target_xen_vm.c.

int xen_vm_detach_overlay_thread ( struct target base,
struct target overlay,
tid_t  tid 
)

Definition at line 2849 of file target_xen_vm.c.

int xen_vm_disable_feature ( struct target target,
int  feature 
)

Definition at line 5944 of file target_xen_vm.c.

int xen_vm_disable_hw_breakpoint ( struct target target,
tid_t  tid,
REG  dreg 
)

Definition at line 5519 of file target_xen_vm.c.

int xen_vm_disable_hw_breakpoints ( struct target target,
tid_t  tid 
)

Definition at line 5469 of file target_xen_vm.c.

int xen_vm_enable_feature ( struct target target,
int  feature,
void *  arg 
)

Definition at line 5925 of file target_xen_vm.c.

int xen_vm_enable_hw_breakpoint ( struct target target,
tid_t  tid,
REG  dreg 
)

Definition at line 5575 of file target_xen_vm.c.

int xen_vm_enable_hw_breakpoints ( struct target target,
tid_t  tid 
)

Definition at line 5494 of file target_xen_vm.c.

int xen_vm_evloop_handler ( int  readfd,
int  fdtype,
void *  state 
)

Definition at line 4409 of file target_xen_vm.c.

void xen_vm_free_spec ( struct xen_vm_spec xspec)

Definition at line 650 of file target_xen_vm.c.

uint64_t xen_vm_get_counter ( struct target target)

Definition at line 5893 of file target_xen_vm.c.

uint64_t xen_vm_get_time ( struct target target)

Definition at line 5882 of file target_xen_vm.c.

uint64_t xen_vm_get_tsc ( struct target target)

Definition at line 5851 of file target_xen_vm.c.

struct target * xen_vm_instantiate ( struct target_spec spec,
struct evloop evloop 
)

These are the only user-visible functions.

Definition at line 635 of file target_xen_vm.c.

int xen_vm_instr_can_switch_context ( struct target target,
ADDR  addr 
)

Definition at line 5834 of file target_xen_vm.c.

int xen_vm_notify_sw_breakpoint ( struct target target,
ADDR  addr,
int  notification 
)

Definition at line 5632 of file target_xen_vm.c.

unsigned char* xen_vm_read_pid ( struct target target,
tid_t  tid,
ADDR  vaddr,
unsigned long  length,
unsigned char *  buf 
)

Definition at line 4823 of file target_xen_vm.c.

int xen_vm_singlestep ( struct target target,
tid_t  tid,
int  isbp,
struct target overlay 
)

Definition at line 5666 of file target_xen_vm.c.

int xen_vm_singlestep_end ( struct target target,
tid_t  tid,
struct target overlay 
)

Definition at line 5766 of file target_xen_vm.c.

int xen_vm_spec_to_argv ( struct target_spec spec,
int *  argc,
char ***  argv 
)

Definition at line 393 of file target_xen_vm.c.

int xen_vm_virq_attach ( int  xce_handle,
XC_EVTCHN_PORT_T *  dbg_port 
)

Definition at line 1938 of file target_xen_vm.c.

int xen_vm_virq_detach ( int  xce_handle,
XC_EVTCHN_PORT_T *  dbg_port 
)

Definition at line 1960 of file target_xen_vm.c.

int xen_vm_virq_or_vmp_attach_or_launch ( struct target target)

Definition at line 2173 of file target_xen_vm.c.

int xen_vm_virq_or_vmp_detach ( struct target target)

Definition at line 2219 of file target_xen_vm.c.

int xen_vm_virq_or_vmp_get_fd ( struct target target)

Definition at line 2231 of file target_xen_vm.c.

int xen_vm_virq_or_vmp_read ( struct target target,
int *  vmid 
)

Definition at line 2243 of file target_xen_vm.c.

int xen_vm_vmp_attach ( char *  path,
int *  cfd,
char **  cpath 
)

Definition at line 1975 of file target_xen_vm.c.

int xen_vm_vmp_detach ( int *  cfd,
char **  cpath 
)

Definition at line 2147 of file target_xen_vm.c.

int xen_vm_vmp_launch ( )

Definition at line 2161 of file target_xen_vm.c.

unsigned long xen_vm_write_pid ( struct target target,
tid_t  tid,
ADDR  vaddr,
unsigned long  length,
unsigned char *  buf 
)

Definition at line 4843 of file target_xen_vm.c.

int xen_vm_xc_attach ( int *  xc_handle,
int *  xce_handle 
)

Definition at line 1886 of file target_xen_vm.c.

int xen_vm_xc_detach ( int *  xc_handle,
int *  xce_handle 
)

Definition at line 1919 of file target_xen_vm.c.

Variable Documentation

int xc_handle = -1

Definition at line 261 of file target_xen_vm.c.

int xce_handle_fd = -1

Definition at line 265 of file target_xen_vm.c.

struct argp xen_vm_argp
Initial value:
= {
xen_vm_argp_opts,xen_vm_argp_parse_opt,NULL,NULL,NULL,NULL,NULL
}
error_t xen_vm_argp_parse_opt(int key, char *arg, struct argp_state *state)
struct argp_option xen_vm_argp_opts[]

Definition at line 626 of file target_xen_vm.c.

char* xen_vm_argp_header = "Xen Backend Options"

Definition at line 629 of file target_xen_vm.c.

struct argp_option xen_vm_argp_opts[]
Initial value:
= {
{ "domain",'m',"DOMAIN",0,"The Xen domain ID or name.",-4 },
{ "kernel-filename",'K',"FILE",0,
"Override xenstore kernel filepath for guest.",-4 },
{ "no-clear-hw-debug-regs",'H',NULL,0,
"Don't clear hardware debug registers at target attach.",-4 },
{ "clear-mem-caches-each-exception",XV_ARGP_CLEAR_MEM_CACHES,NULL,0,
"Clear mem caches on each debug exception.",-4 },
{ "memcache-mmap-size",XV_ARGP_MEMCACHE_MMAP_SIZE,"BYTES",0,
"Max size (bytes) of the mmap cache (default 128MB).",-4 },
{ "no-hvm-setcontext",'V',NULL,0,
"Don't use HVM-specific libxc get/set context functions to access"
"virtual CPU info.",-4 },
{ "configfile",'c',"FILE",0,"The Xen config file.",-4 },
{ "replaydir",XV_ARGP_REPLAYDIR,"DIR",0,"The XenTT replay directory.",-4 },
{ "no-use-multiplexer",'M',NULL,0,"Do not spawn/attach to the Xen multiplexer server",-4 },
{ "dominfo-timeout",'T',"MICROSECONDS",0,"If libxc gets a \"NULL\" dominfo status, the number of microseconds we should keep retrying",-4 },
{ "hypervisor-ignores-userspace-exceptions",XV_ARGP_HIUE,NULL,0,"If your Xen hypervisor is not a Utah-patched version, make sure to supply this flag!",-4 },
{ 0,0,0,0,0,0 }
}
#define XV_ARGP_HIUE
#define XV_ARGP_MEMCACHE_MMAP_SIZE
#define XV_ARGP_CLEAR_MEM_CACHES
#define XV_ARGP_REPLAYDIR

Definition at line 363 of file target_xen_vm.c.

struct xen_vm_mem_ops xen_vm_mem_ops_builtin

Definition at line 754 of file target_xen_vm_mem_builtin.c.

struct target_ops xen_vm_ops

Definition at line 275 of file target_xen_vm.c.