25 #include <sys/types.h>
64 VMI_XEN|VMI_INIT_PARTIAL, xstate->
name) == VMI_FAILURE) {
65 verror(
"failed to init vmi instance for dom %d\n", xstate->
id);
82 OFFSET tasks_offset,pid_offset,mm_offset,pgd_offset;
94 val = (
char *)g_hash_table_lookup(target->
config,
"OS_KERNEL_TASKS_OFFSET");
96 tasks_offset = (
ADDR)strtol(val,NULL,0);
97 val = (
char *)g_hash_table_lookup(target->
config,
"OS_KERNEL_PID_OFFSET");
99 pid_offset = (
ADDR)strtol(val,NULL,0);
100 val = (
char *)g_hash_table_lookup(target->
config,
"OS_KERNEL_MM_OFFSET");
102 mm_offset = (
ADDR)strtol(val,NULL,0);
103 val = (
char *)g_hash_table_lookup(target->
config,
"OS_KERNEL_MM_PGD_OFFSET");
105 pgd_offset = (
ADDR)strtol(val,NULL,0);
107 symbol_file = (
char *)g_hash_table_lookup(target->
config,
108 "OS_KERNEL_SYSMAP_FILE");
119 #define LIBVMI_CONFIG_TEMPLATE "{ostype=\"Linux\";" \
120 " sysmap=\"%s\"; linux_tasks=0x%"PRIxOFFSET"; linux_mm=0x%"PRIxOFFSET";" \
121 " linux_pid=0x%"PRIxOFFSET"; linux_pgd=0x%"PRIxOFFSET";" \
123 #define LIBVMI_CONFIG_TEMPLATE_HVM "{ ostype=\"Linux\"; sysmap=\"%s\"; }"
125 if (0 && xstate->
hvm) {
134 symbol_file,tasks_offset,mm_offset,pid_offset,pgd_offset);
137 if (vmi_init_complete(&mstate->
vmi_instance, tmp) == VMI_FAILURE) {
138 verror(
"failed to complete init of vmi instance for dom %d (config was '%s')\n",
210 tpaddr = vmi_pagetable_lookup(mstate->
vmi_instance,pgd,tvaddr);
223 tid,vaddr,*paddr,opaddr);
229 unsigned long length,
230 unsigned char *buf) {
233 unsigned char *retval = NULL;
239 retval = (
unsigned char *)
malloc(length+1);
243 if (vmi_read_pa(mstate->
vmi_instance,paddr,retval,length) != length) {
245 length,paddr,strerror(errno));
260 unsigned long length,
261 unsigned char *buf) {
268 if (vmi_write_pa(mstate->
vmi_instance,paddr,buf,length) != length) {
270 length,paddr,strerror(errno));
294 unsigned long target_length,
322 "read dom %d: addr=0x%"PRIxADDR" len=%d tid=%d\n",
323 xstate->
id,addr,target_length,tid);
326 if (target_length == 0)
327 return (
unsigned char *)vmi_read_str_va(vmi, (addr_t)addr, tid);
331 buf =
malloc(target_length + 1);
337 cc = vmi_read_va(vmi, (addr_t)addr, tid, buf, target_length);
340 if ((
unsigned long)cc != target_length) {
342 verror(
"vmi_read_va returns partial data (%lu of %lu)\n",
343 (
unsigned long)cc, target_length);
345 verror(
"vmi_read_va returns no data (%lu of %lu)\n",
346 (
unsigned long)cc, target_length);
353 "read dom %d: addr=0x%"PRIxADDR" len=%d tid=%d SUCCESS\n",
354 xstate->
id,addr,target_length,tid);
358 verror(
"could not malloc buf\n");
370 unsigned long length,
371 unsigned char *buf) {
387 "write dom %d: addr=0x%"PRIxADDR" len=%d tid=%d\n",
388 xstate->
id,addr,length,tid);
390 return (
unsigned long)vmi_write_va(mstate->
vmi_instance, (addr_t)addr,
391 tid, buf, (
size_t)length);
int target_arch_x86_v2p(struct target *target, ADDR pgd, ADDR virt, arch_x86_v2p_flags_t flags, ADDR *phys)
int xen_vm_mem_libvmi_addr_v2p(struct target *target, tid_t tid, ADDR pgd, ADDR vaddr, ADDR *paddr)
#define LIBVMI_CONFIG_TEMPLATE_HVM
vmi_instance_t vmi_instance
unsigned char * xen_vm_mem_libvmi_read_phys(struct target *target, ADDR paddr, unsigned long length, unsigned char *buf)
unsigned char * xen_vm_mem_libvmi_read_tid(struct target *target, tid_t tid, ADDR pgd, ADDR addr, unsigned long target_length, unsigned char *buf)
int(* init)(struct target *target)
#define LIBVMI_CONFIG_TEMPLATE
struct malloc_state * mstate
int xen_vm_mem_libvmi_attach(struct target *target)
#define verror(format,...)
unsigned int clear_mem_caches_each_exception
int xen_vm_mem_libvmi_handle_exception_any(struct target *target)
int xen_vm_mem_libvmi_init(struct target *target)
struct xen_vm_mem_ops xen_vm_mem_ops_libvmi
#define vdebug(devel, areas, flags, format,...)
void * calloc(size_t nmemb, size_t size)
unsigned long xen_vm_mem_libvmi_write_tid(struct target *target, tid_t tid, ADDR pgd, ADDR addr, unsigned long length, unsigned char *buf)
int xen_vm_mem_libvmi_fini(struct target *target)
struct target_spec * spec
void * malloc(size_t size)
int xen_vm_mem_libvmi_handle_exception_ours(struct target *target)
int xen_vm_mem_libvmi_handle_pause(struct target *target)
unsigned long xen_vm_mem_libvmi_write_phys(struct target *target, ADDR paddr, unsigned long length, unsigned char *buf)