Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
JitCore.c
Go to the documentation of this file.
1 #include <Python.h>
2 #include "structmember.h"
3 #include <stdint.h>
4 #include <inttypes.h>
5 #include "queue.h"
6 #include "vm_mngr.h"
7 #include "vm_mngr_py.h"
8 #include "JitCore.h"
9 
10 
12 {
13  self->ob_type->tp_free((PyObject*)self);
14 }
15 
16 
17 PyObject * JitCpu_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
18 {
19  JitCpu *self;
20 
21  self = (JitCpu *)type->tp_alloc(type, 0);
22  return (PyObject *)self;
23 }
24 
25 PyObject * JitCpu_get_vmmngr(JitCpu *self, void *closure)
26 {
27  if (self->pyvm) {
28  Py_INCREF(self->pyvm);
29  return self->pyvm;
30  }
31  Py_INCREF(Py_None);
32  return Py_None;
33 }
34 
35 PyObject * JitCpu_set_vmmngr(JitCpu *self, PyObject *value, void *closure)
36 {
37  self->pyvm = value;
38  return 0;
39 }
40 
41 PyObject * JitCpu_get_jitter(JitCpu *self, void *closure)
42 {
43  if (self->jitter) {
44  Py_INCREF(self->jitter);
45  return self->jitter;
46  }
47  Py_INCREF(Py_None);
48  return Py_None;
49 }
50 
51 PyObject * JitCpu_set_jitter(JitCpu *self, PyObject *value, void *closure)
52 {
53  self->jitter = value;
54  return 0;
55 }
56 
57 
58 void Resolve_dst(block_id* b, uint64_t addr, uint64_t is_local)
59 {
60  b->address = addr;
61  b->is_local = is_local;
62 }
63 
64 
65 
66 
67 uint8_t __attribute__((weak)) MEM_LOOKUP_08(JitCpu* jitcpu, uint64_t addr)
68 {
69  return vm_MEM_LOOKUP_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr);
70 }
71 
72 uint16_t __attribute__((weak)) MEM_LOOKUP_16(JitCpu* jitcpu, uint64_t addr)
73 {
74  return vm_MEM_LOOKUP_16(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr);
75 }
76 
77 uint32_t __attribute__((weak)) MEM_LOOKUP_32(JitCpu* jitcpu, uint64_t addr)
78 {
79  return vm_MEM_LOOKUP_32(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr);
80 }
81 
82 uint64_t __attribute__((weak)) MEM_LOOKUP_64(JitCpu* jitcpu, uint64_t addr)
83 {
84  return vm_MEM_LOOKUP_64(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr);
85 }
86 
87 void __attribute__((weak)) MEM_WRITE_08(JitCpu* jitcpu, uint64_t addr, uint8_t src)
88 {
89  vm_MEM_WRITE_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
90 }
91 
92 void __attribute__((weak)) MEM_WRITE_16(JitCpu* jitcpu, uint64_t addr, uint16_t src)
93 {
94  vm_MEM_WRITE_16(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
95 }
96 
97 void __attribute__((weak)) MEM_WRITE_32(JitCpu* jitcpu, uint64_t addr, uint32_t src)
98 {
99  vm_MEM_WRITE_32(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
100 }
101 
102 void __attribute__((weak)) MEM_WRITE_64(JitCpu* jitcpu, uint64_t addr, uint64_t src)
103 {
104  vm_MEM_WRITE_64(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
105 }
106 
107 
108 
109 
110 PyObject* __attribute__((weak)) vm_get_mem(JitCpu *self, PyObject* args)
111 {
112  PyObject *py_addr;
113  PyObject *py_len;
114 
115  uint64_t addr;
116  uint64_t size;
117  PyObject *obj_out;
118  char * buf_out;
119  int ret;
120 
121  if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_len))
122  return NULL;
123 
124  PyGetInt(py_addr, addr);
125  PyGetInt(py_len, size);
126 
127  ret = vm_read_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, &buf_out, size);
128  if (ret < 0) {
129  PyErr_SetString(PyExc_RuntimeError, "cannot find address");
130  return NULL;
131  }
132 
133  obj_out = PyString_FromStringAndSize(buf_out, size);
134  free(buf_out);
135  return obj_out;
136 }
unsigned char vm_MEM_LOOKUP_08(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:460
void Resolve_dst(block_id *b, uint64_t addr, uint64_t is_local)
Definition: JitCore.c:58
void MEM_WRITE_16(JitCpu *jitcpu, uint64_t addr, uint16_t src)
uint8_t MEM_LOOKUP_08(JitCpu *jitcpu, uint64_t addr)
uint64_t vm_MEM_LOOKUP_64(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:478
PyObject * JitCpu_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Definition: JitCore.c:17
#define PyGetInt(item, value)
Definition: JitCore.h:8
unsigned int vm_MEM_LOOKUP_32(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:472
PyObject * vm_get_mem(JitCpu *self, PyObject *args)
uint8_t is_local
Definition: JitCore.h:89
unsigned short vm_MEM_LOOKUP_16(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:466
void vm_MEM_WRITE_64(vm_mngr_t *vm_mngr, uint64_t addr, uint64_t src)
Definition: vm_mngr.c:454
PyObject * JitCpu_set_vmmngr(JitCpu *self, PyObject *value, void *closure)
Definition: JitCore.c:35
PyObject * JitCpu_get_vmmngr(JitCpu *self, void *closure)
Definition: JitCore.c:25
void vm_MEM_WRITE_16(vm_mngr_t *vm_mngr, uint64_t addr, unsigned short src)
Definition: vm_mngr.c:444
PyObject * JitCpu_set_jitter(JitCpu *self, PyObject *value, void *closure)
Definition: JitCore.c:51
uint16_t MEM_LOOKUP_16(JitCpu *jitcpu, uint64_t addr)
void MEM_WRITE_32(JitCpu *jitcpu, uint64_t addr, uint32_t src)
uint32_t MEM_LOOKUP_32(JitCpu *jitcpu, uint64_t addr)
void vm_MEM_WRITE_08(vm_mngr_t *vm_mngr, uint64_t addr, unsigned char src)
Definition: vm_mngr.c:438
void MEM_WRITE_64(JitCpu *jitcpu, uint64_t addr, uint64_t src)
uint64_t MEM_LOOKUP_64(JitCpu *jitcpu, uint64_t addr)
void MEM_WRITE_08(JitCpu *jitcpu, uint64_t addr, uint8_t src)
void JitCpu_dealloc(JitCpu *self)
Definition: JitCore.c:11
Definition: JitCore.h:93
uint8_t __attribute__((weak))
Definition: JitCore.c:67
void vm_MEM_WRITE_32(vm_mngr_t *vm_mngr, uint64_t addr, unsigned int src)
Definition: vm_mngr.c:449
uint64_t address
Definition: JitCore.h:90
PyObject * JitCpu_get_jitter(JitCpu *self, void *closure)
Definition: JitCore.c:41
int vm_read_mem(vm_mngr_t *vm_mngr, uint64_t addr, char **buffer_ptr, uint64_t size)
Definition: vm_mngr.c:486