Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
Macros | Functions | Variables
vm_mngr_py.c File Reference
#include <Python.h>
#include "structmember.h"
#include <stdint.h>
#include <inttypes.h>
#include <signal.h>
#include "queue.h"
#include "vm_mngr.h"
#include "vm_mngr_py.h"
+ Include dependency graph for vm_mngr_py.c:

Go to the source code of this file.

Macros

#define MIN(a, b)   (((a)<(b))?(a):(b))
 
#define MAX(a, b)   (((a)>(b))?(a):(b))
 
#define RAISE(errtype, msg)   {PyObject* p; p = PyErr_Format( errtype, msg ); return p;}
 
#define PyGetInt(item, value)
 

Functions

PyObject * _vm_get_exception (unsigned int xcpt)
 
PyObject * vm_is_mem_mapped (VmMngr *self, PyObject *item)
 
PyObject * vm_get_mem_base_addr (VmMngr *self, PyObject *item)
 
static void sig_alarm (int signo)
 
PyObject * set_alarm (VmMngr *self)
 
PyObject * vm_add_memory_page (VmMngr *self, PyObject *args)
 
PyObject * vm_set_mem_access (VmMngr *self, PyObject *args)
 
PyObject * vm_set_mem (VmMngr *self, PyObject *args)
 
PyObject * vm_get_mem (VmMngr *self, PyObject *args)
 
PyObject * vm_add_memory_breakpoint (VmMngr *self, PyObject *args)
 
PyObject * vm_remove_memory_breakpoint (VmMngr *self, PyObject *args)
 
PyObject * vm_set_exception (VmMngr *self, PyObject *args)
 
PyObject * vm_get_exception (VmMngr *self, PyObject *args)
 
PyObject * vm_init_memory_page_pool (VmMngr *self, PyObject *args)
 
PyObject * vm_init_code_bloc_pool (VmMngr *self, PyObject *args)
 
PyObject * vm_init_memory_breakpoint (VmMngr *self, PyObject *args)
 
PyObject * vm_reset_memory_breakpoint (VmMngr *self, PyObject *args)
 
PyObject * vm_dump (PyObject *self)
 
PyObject * vm_dump_memory_breakpoint (VmMngr *self, PyObject *args)
 
PyObject * vm_get_all_memory (VmMngr *self, PyObject *args)
 
PyObject * vm_reset_memory_page_pool (VmMngr *self, PyObject *args)
 
PyObject * vm_reset_code_bloc_pool (VmMngr *self, PyObject *args)
 
PyObject * vm_add_code_bloc (VmMngr *self, PyObject *args)
 
PyObject * vm_dump_code_bloc_pool (VmMngr *self)
 
PyObject * vm_set_addr2obj (VmMngr *self, PyObject *args)
 
static PyObject * vm_set_big_endian (VmMngr *self, PyObject *value, void *closure)
 
static PyObject * vm_set_little_endian (VmMngr *self, PyObject *value, void *closure)
 
static void VmMngr_dealloc (VmMngr *self)
 
static PyObject * VmMngr_new (PyTypeObject *type, PyObject *args, PyObject *kwds)
 
static PyObject * VmMngr_get_vmmngr (VmMngr *self, void *closure)
 
static int VmMngr_set_vmmngr (VmMngr *self, PyObject *value, void *closure)
 
static int VmMngr_init (VmMngr *self, PyObject *args, PyObject *kwds)
 
PyMODINIT_FUNC initVmMngr (void)
 

Variables

struct memory_page_list_head memory_page_pool
 
struct code_bloc_list_head code_bloc_pool
 
VmMngrglobal_vmmngr
 
static PyMemberDef VmMngr_members []
 
static PyMethodDef VmMngr_methods []
 
static PyGetSetDef VmMngr_getseters []
 
static PyTypeObject VmMngrType
 
static PyMethodDef VmMngr_Methods []
 
static PyObject * Vm_Mngr_Error
 

Macro Definition Documentation

#define MAX (   a,
 
)    (((a)>(b))?(a):(b))

Definition at line 28 of file vm_mngr_py.c.

#define MIN (   a,
 
)    (((a)<(b))?(a):(b))

Definition at line 27 of file vm_mngr_py.c.

#define PyGetInt (   item,
  value 
)
Value:
if (PyInt_Check(item)){ \
value = (uint64_t)PyInt_AsLong(item); \
} \
else if (PyLong_Check(item)){ \
value = (uint64_t)PyLong_AsUnsignedLongLong(item); \
} \
else{ \
RAISE(PyExc_TypeError,"arg must be int"); \
} \
#define RAISE(errtype, msg)
Definition: vm_mngr_py.c:33

Definition at line 58 of file vm_mngr_py.c.

#define RAISE (   errtype,
  msg 
)    {PyObject* p; p = PyErr_Format( errtype, msg ); return p;}

Definition at line 33 of file vm_mngr_py.c.

Function Documentation

PyObject* _vm_get_exception ( unsigned int  xcpt)

Definition at line 40 of file vm_mngr_py.c.

41 {
42  PyObject*p;
43 
44  if (!xcpt)
45  p = NULL;
46  else if (xcpt & EXCEPT_CODE_AUTOMOD)
47  p = PyErr_Format( PyExc_RuntimeError, "EXCEPT_CODE_AUTOMOD" );
48  else if (xcpt & EXCEPT_UNK_EIP)
49  p = PyErr_Format( PyExc_RuntimeError, "EXCEPT_UNK_EIP" );
50  else if (xcpt & EXCEPT_UNK_MEM_AD)
51  p = PyErr_Format( PyExc_RuntimeError, "EXCEPT_UNK_MEM_AD" );
52 
53  else p = PyErr_Format( PyExc_RuntimeError, "EXCEPT_UNKNOWN" );
54  return p;
55 }
#define EXCEPT_CODE_AUTOMOD
Definition: vm_mngr.h:130
#define EXCEPT_UNK_EIP
Definition: vm_mngr.h:140
#define EXCEPT_UNK_MEM_AD
Definition: vm_mngr.h:138
PyMODINIT_FUNC initVmMngr ( void  )

Definition at line 664 of file vm_mngr_py.c.

665 {
666  PyObject *m;
667 
668  if (PyType_Ready(&VmMngrType) < 0)
669  return;
670 
671  m = Py_InitModule("VmMngr", VmMngr_Methods);
672  if (m == NULL)
673  return;
674 
675  Vm_Mngr_Error = PyErr_NewException("VmMngr.error", NULL, NULL);
676  Py_INCREF(Vm_Mngr_Error);
677  PyModule_AddObject(m, "error", Vm_Mngr_Error);
678 
679  Py_INCREF(&VmMngrType);
680  PyModule_AddObject(m, "Vm", (PyObject *)&VmMngrType);
681 }
static PyTypeObject VmMngrType
Definition: vm_mngr_py.c:613
static PyObject * Vm_Mngr_Error
Definition: vm_mngr_py.c:661
static PyMethodDef VmMngr_Methods[]
Definition: vm_mngr_py.c:656
PyObject* set_alarm ( VmMngr self)

Definition at line 113 of file vm_mngr_py.c.

114 {
115  global_vmmngr = self;
116  signal(SIGALRM, sig_alarm);
117  return PyLong_FromUnsignedLongLong((uint64_t)0);
118 }
static void sig_alarm(int signo)
Definition: vm_mngr_py.c:107
VmMngr * global_vmmngr
Definition: vm_mngr_py.c:38

+ Here is the call graph for this function:

static void sig_alarm ( int  signo)
static

Definition at line 107 of file vm_mngr_py.c.

108 {
110  return;
111 }
#define BREAK_SIGALARM
Definition: vm_mngr.h:60
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
VmMngr * global_vmmngr
Definition: vm_mngr_py.c:38
uint64_t exception_flags
Definition: vm_mngr.h:80

+ Here is the caller graph for this function:

PyObject* vm_add_code_bloc ( VmMngr self,
PyObject *  args 
)

Definition at line 427 of file vm_mngr_py.c.

428 {
429  PyObject *item1;
430  PyObject *item2;
431  uint64_t ret = 0x1337beef;
432  uint64_t ad_start, ad_stop, ad_code = 0;
433 
434  struct code_bloc_node * cbp;
435 
436  if (!PyArg_ParseTuple(args, "OO", &item1, &item2))
437  return NULL;
438 
439  PyGetInt(item1, ad_start);
440  PyGetInt(item2, ad_stop);
441 
442  cbp = create_code_bloc_node(ad_start, ad_stop);
443  cbp->ad_start = ad_start;
444  cbp->ad_stop = ad_stop;
445  cbp->ad_code = ad_code;
446  add_code_bloc(&self->vm_mngr, cbp);
447  return PyLong_FromUnsignedLongLong((uint64_t)ret);
448 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
uint64_t ad_code
Definition: vm_mngr.h:109
uint64_t ad_stop
Definition: vm_mngr.h:108
uint64_t ad_start
Definition: vm_mngr.h:107
void add_code_bloc(vm_mngr_t *vm_mngr, struct code_bloc_node *cbp)
Definition: vm_mngr.c:1337
struct code_bloc_node * create_code_bloc_node(uint64_t ad_start, uint64_t ad_stop)
Definition: vm_mngr.c:1320

+ Here is the call graph for this function:

PyObject* vm_add_memory_breakpoint ( VmMngr self,
PyObject *  args 
)

Definition at line 260 of file vm_mngr_py.c.

261 {
262  PyObject *ad;
263  PyObject *size;
264  PyObject *access;
265 
266  uint64_t b_ad;
267  uint64_t b_size;
268  uint64_t b_access;
269 
270  if (!PyArg_ParseTuple(args, "OOO", &ad, &size, &access))
271  return NULL;
272 
273  PyGetInt(ad, b_ad);
274  PyGetInt(size, b_size);
275  PyGetInt(access, b_access);
276 
277  add_memory_breakpoint(&self->vm_mngr, b_ad, b_size, b_access);
278  Py_INCREF(Py_None);
279  return Py_None;
280 }
void add_memory_breakpoint(vm_mngr_t *vm_mngr, uint64_t ad, uint64_t size, unsigned int access)
Definition: vm_mngr.c:1543
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58

+ Here is the call graph for this function:

PyObject* vm_add_memory_page ( VmMngr self,
PyObject *  args 
)

Definition at line 122 of file vm_mngr_py.c.

123 {
124  PyObject *addr;
125  PyObject *access;
126  PyObject *item_str;
127  uint64_t buf_size;
128  char* buf_data;
129  Py_ssize_t length;
130  uint64_t ret = 0x1337beef;
131  uint64_t page_addr;
132  uint64_t page_access;
133 
134  struct memory_page_node * mpn;
135 
136  if (!PyArg_ParseTuple(args, "OOO", &addr, &access, &item_str))
137  return NULL;
138 
139  PyGetInt(addr, page_addr);
140  PyGetInt(access, page_access);
141 
142  if(!PyString_Check(item_str))
143  RAISE(PyExc_TypeError,"arg must be str");
144 
145  buf_size = PyString_Size(item_str);
146  PyString_AsStringAndSize(item_str, &buf_data, &length);
147 
148  /*
149  fprintf(stderr, "add page %"PRIX64" %"PRIX64" %"PRIX64"\n",
150  page_addr, buf_size, page_access);
151  */
152  mpn = create_memory_page_node(page_addr, buf_size, page_access);
153  if (mpn == NULL)
154  RAISE(PyExc_TypeError,"cannot create page");
155  if (is_mpn_in_tab(&self->vm_mngr, mpn)) {
156  free(mpn->ad_hp);
157  free(mpn);
158  RAISE(PyExc_TypeError,"known page in memory");
159  }
160 
161  memcpy(mpn->ad_hp, buf_data, buf_size);
162  add_memory_page(&self->vm_mngr, mpn);
163 
164  return PyLong_FromUnsignedLongLong((uint64_t)ret);
165 
166 }
#define RAISE(errtype, msg)
Definition: vm_mngr_py.c:33
void add_memory_page(vm_mngr_t *vm_mngr, struct memory_page_node *mpn_a)
Definition: vm_mngr.c:1467
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
void * ad_hp
Definition: vm_mngr.h:100
struct memory_page_node * create_memory_page_node(uint64_t ad, unsigned int size, unsigned int access)
Definition: vm_mngr.c:1295
int is_mpn_in_tab(vm_mngr_t *vm_mngr, struct memory_page_node *mpn_a)
Definition: vm_mngr.c:1424

+ Here is the call graph for this function:

PyObject* vm_dump ( PyObject *  self)

Definition at line 356 of file vm_mngr_py.c.

357 {
358  char* buf_final;
359  PyObject* ret_obj;
360 
361  buf_final = dump(&((VmMngr* )self)->vm_mngr);
362  ret_obj = PyString_FromString(buf_final);
363  free(buf_final);
364  return ret_obj;
365 }
char * dump(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1493

+ Here is the call graph for this function:

PyObject* vm_dump_code_bloc_pool ( VmMngr self)

Definition at line 450 of file vm_mngr_py.c.

451 {
453  Py_INCREF(Py_None);
454  return Py_None;
455 
456 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
void dump_code_bloc_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1346

+ Here is the call graph for this function:

PyObject* vm_dump_memory_breakpoint ( VmMngr self,
PyObject *  args 
)

Definition at line 367 of file vm_mngr_py.c.

368 {
370  Py_INCREF(Py_None);
371  return Py_None;
372 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
void dump_memory_breakpoint_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1529

+ Here is the call graph for this function:

PyObject* vm_get_all_memory ( VmMngr self,
PyObject *  args 
)

Definition at line 375 of file vm_mngr_py.c.

376 {
377  PyObject *o;
378  struct memory_page_node * mpn;
379  PyObject *dict;
380  PyObject *dict2;
381 
382 
383  dict = PyDict_New();
384 
385  LIST_FOREACH(mpn, &self->vm_mngr.memory_page_pool, next){
386 
387  dict2 = PyDict_New();
388 
389  o = PyString_FromStringAndSize(mpn->ad_hp, mpn->size);
390  PyDict_SetItemString(dict2, "data", o);
391  Py_DECREF(o);
392 
393  o = PyInt_FromLong((long)mpn->size);
394  PyDict_SetItemString(dict2, "size", o);
395  Py_DECREF(o);
396 
397  o = PyInt_FromLong((long)mpn->access);
398  PyDict_SetItemString(dict2, "access", o);
399  Py_DECREF(o);
400 
401  o = PyInt_FromLong((long)mpn->ad);
402  PyDict_SetItem(dict, o, dict2);
403  Py_DECREF(o);
404  Py_DECREF(dict2);
405  }
406  return dict;
407 }
#define LIST_FOREACH(var, head, field)
Definition: queue.h:332
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
uint64_t access
Definition: vm_mngr.h:99
void * ad_hp
Definition: vm_mngr.h:100
struct memory_page_list_head memory_page_pool
Definition: vm_mngr.h:70
uint64_t ad
Definition: vm_mngr.h:97
uint64_t size
Definition: vm_mngr.h:98
PyObject* vm_get_exception ( VmMngr self,
PyObject *  args 
)

Definition at line 317 of file vm_mngr_py.c.

318 {
319  return PyLong_FromUnsignedLongLong((uint64_t)self->vm_mngr.exception_flags);
320 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
uint64_t exception_flags
Definition: vm_mngr.h:80
PyObject* vm_get_mem ( VmMngr self,
PyObject *  args 
)

Definition at line 231 of file vm_mngr_py.c.

232 {
233  PyObject *py_addr;
234  PyObject *py_len;
235 
236  uint64_t addr;
237  uint64_t size;
238  PyObject *obj_out;
239  char * buf_out;
240  int ret;
241 
242  if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_len))
243  return NULL;
244 
245  PyGetInt(py_addr, addr);
246  PyGetInt(py_len, size);
247 
248  ret = vm_read_mem(&self->vm_mngr, addr, &buf_out, size);
249  if (ret < 0) {
250  PyErr_SetString(PyExc_RuntimeError, "cannot find address");
251  return NULL;
252  }
253 
254  obj_out = PyString_FromStringAndSize(buf_out, size);
255  free(buf_out);
256  return obj_out;
257 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
uint64_t size
Definition: vm_mngr.h:98
int vm_read_mem(vm_mngr_t *vm_mngr, uint64_t addr, char **buffer_ptr, uint64_t size)
Definition: vm_mngr.c:486

+ Here is the call graph for this function:

PyObject* vm_get_mem_base_addr ( VmMngr self,
PyObject *  item 
)

Definition at line 86 of file vm_mngr_py.c.

87 {
88  PyObject *addr;
89 
90  uint64_t page_addr;
91  uint64_t addr_base;
92  unsigned int ret;
93 
94  if (!PyArg_ParseTuple(item, "O", &addr))
95  return NULL;
96 
97  PyGetInt(addr, page_addr);
98 
99  ret = get_mem_base_addr(&self->vm_mngr, page_addr, &addr_base);
100  if (ret == 0){
101  Py_INCREF(Py_None);
102  return Py_None;
103  }
104  return PyLong_FromUnsignedLongLong((uint64_t)addr_base);
105 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
uint64_t get_mem_base_addr(vm_mngr_t *vm_mngr, uint64_t ad, uint64_t *addr_base)
Definition: vm_mngr.c:107

+ Here is the call graph for this function:

PyObject* vm_init_code_bloc_pool ( VmMngr self,
PyObject *  args 
)

Definition at line 332 of file vm_mngr_py.c.

333 {
335  Py_INCREF(Py_None);
336  return Py_None;
337 
338 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
void init_code_bloc_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1366

+ Here is the call graph for this function:

PyObject* vm_init_memory_breakpoint ( VmMngr self,
PyObject *  args 
)

Definition at line 340 of file vm_mngr_py.c.

341 {
343  Py_INCREF(Py_None);
344  return Py_None;
345 
346 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
void init_memory_breakpoint(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1373

+ Here is the call graph for this function:

PyObject* vm_init_memory_page_pool ( VmMngr self,
PyObject *  args 
)

Definition at line 325 of file vm_mngr_py.c.

326 {
328  Py_INCREF(Py_None);
329  return Py_None;
330 }
void init_memory_page_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1358
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9

+ Here is the call graph for this function:

PyObject* vm_is_mem_mapped ( VmMngr self,
PyObject *  item 
)

Definition at line 70 of file vm_mngr_py.c.

71 {
72  PyObject *addr;
73  uint64_t page_addr;
74  uint32_t ret;
75  if (!PyArg_ParseTuple(item, "O", &addr))
76  return NULL;
77 
78  PyGetInt(addr, page_addr);
79 
80  ret = is_mem_mapped(&self->vm_mngr, page_addr);
81  return PyInt_FromLong((long)ret);
82 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
int is_mem_mapped(vm_mngr_t *vm_mngr, uint64_t ad)
Definition: vm_mngr.c:87
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58

+ Here is the call graph for this function:

PyObject* vm_remove_memory_breakpoint ( VmMngr self,
PyObject *  args 
)

Definition at line 283 of file vm_mngr_py.c.

284 {
285  PyObject *ad;
286  PyObject *access;
287  uint64_t b_ad;
288  uint64_t b_access;
289 
290  if (!PyArg_ParseTuple(args, "OO", &ad, &access))
291  return NULL;
292 
293  PyGetInt(ad, b_ad);
294  PyGetInt(access, b_access);
295  remove_memory_breakpoint(&self->vm_mngr, b_ad, b_access);
296 
297  Py_INCREF(Py_None);
298  return Py_None;
299 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
uint64_t access
Definition: vm_mngr.h:99
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
void remove_memory_breakpoint(vm_mngr_t *vm_mngr, uint64_t ad, unsigned int access)
Definition: vm_mngr.c:1559
uint64_t ad
Definition: vm_mngr.h:97

+ Here is the call graph for this function:

PyObject* vm_reset_code_bloc_pool ( VmMngr self,
PyObject *  args 
)

Definition at line 418 of file vm_mngr_py.c.

419 {
421  Py_INCREF(Py_None);
422  return Py_None;
423 
424 }
void reset_code_bloc_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1396
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

PyObject* vm_reset_memory_breakpoint ( VmMngr self,
PyObject *  args 
)

Definition at line 348 of file vm_mngr_py.c.

349 {
351  Py_INCREF(Py_None);
352  return Py_None;
353 
354 }
void reset_memory_breakpoint(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1411
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

PyObject* vm_reset_memory_page_pool ( VmMngr self,
PyObject *  args 
)

Definition at line 410 of file vm_mngr_py.c.

411 {
413  Py_INCREF(Py_None);
414  return Py_None;
415 
416 }
void reset_memory_page_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1379
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

PyObject* vm_set_addr2obj ( VmMngr self,
PyObject *  args 
)

Definition at line 459 of file vm_mngr_py.c.

460 {
461  PyObject* addr2obj;
462 
463  if (!PyArg_ParseTuple(args, "O", &addr2obj))
464  return NULL;
465 
466  if (self->vm_mngr.addr2obj != NULL){
467  Py_DECREF(self->vm_mngr.addr2obj);
468  }
469 
470  Py_INCREF(addr2obj);
471  self->vm_mngr.addr2obj = addr2obj;
472  Py_INCREF(Py_None);
473  return Py_None;
474 }
PyObject * addr2obj
Definition: vm_mngr.h:82
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
static PyObject* vm_set_big_endian ( VmMngr self,
PyObject *  value,
void *  closure 
)
static

Definition at line 478 of file vm_mngr_py.c.

479 {
480  self->vm_mngr.sex = __BIG_ENDIAN;
481  Py_INCREF(Py_None);
482  return Py_None;
483 }
PyObject* vm_set_exception ( VmMngr self,
PyObject *  args 
)

Definition at line 302 of file vm_mngr_py.c.

303 {
304  PyObject *item1;
305  uint64_t i;
306 
307  if (!PyArg_ParseTuple(args, "O", &item1))
308  return NULL;
309 
310  PyGetInt(item1, i);
311 
312  self->vm_mngr.exception_flags = i;
313  Py_INCREF(Py_None);
314  return Py_None;
315 }
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
static PyObject* vm_set_little_endian ( VmMngr self,
PyObject *  value,
void *  closure 
)
static

Definition at line 486 of file vm_mngr_py.c.

487 {
488  self->vm_mngr.sex = __LITTLE_ENDIAN;
489  Py_INCREF(Py_None);
490  return Py_None;
491 }
PyObject* vm_set_mem ( VmMngr self,
PyObject *  args 
)

Definition at line 196 of file vm_mngr_py.c.

197 {
198  PyObject *py_addr;
199  PyObject *py_buffer;
200  Py_ssize_t py_length;
201 
202  char * buffer;
203  uint64_t size;
204  uint64_t addr;
205  int ret = 0x1337;
206 
207  if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_buffer))
208  return NULL;
209 
210  PyGetInt(py_addr, addr);
211 
212  if(!PyString_Check(py_buffer))
213  RAISE(PyExc_TypeError,"arg must be str");
214 
215  size = PyString_Size(py_buffer);
216  PyString_AsStringAndSize(py_buffer, &buffer, &py_length);
217 
218  ret = vm_write_mem(&self->vm_mngr, addr, buffer, size);
219  if (ret < 0)
220  RAISE(PyExc_TypeError, "Error in set_mem");
221 
222  check_write_code_bloc(&self->vm_mngr, size*8, addr);
223 
224  Py_INCREF(Py_None);
225  return Py_None;
226 }
#define RAISE(errtype, msg)
Definition: vm_mngr_py.c:33
int vm_write_mem(vm_mngr_t *vm_mngr, uint64_t addr, char *buffer, uint64_t size)
Definition: vm_mngr.c:518
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
void check_write_code_bloc(vm_mngr_t *vm_mngr, uint64_t my_size, uint64_t addr)
Definition: vm_mngr.c:391
uint64_t size
Definition: vm_mngr.h:98

+ Here is the call graph for this function:

PyObject* vm_set_mem_access ( VmMngr self,
PyObject *  args 
)

Definition at line 170 of file vm_mngr_py.c.

171 {
172  PyObject *addr;
173  PyObject *access;
174 
175  uint64_t ret = 0x1337beef;
176  uint64_t page_addr;
177  uint64_t page_access;
178  struct memory_page_node * mpn;
179 
180  if (!PyArg_ParseTuple(args, "OO", &addr, &access))
181  return NULL;
182 
183  PyGetInt(addr, page_addr);
184  PyGetInt(access, page_access);
185 
186  mpn = get_memory_page_from_address(&self->vm_mngr, page_addr);
187  if (!mpn){
188  PyErr_SetString(PyExc_RuntimeError, "cannot find address");
189  return 0;
190  }
191 
192  mpn->access = page_access;
193  return PyLong_FromUnsignedLongLong((uint64_t)ret);
194 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
uint64_t access
Definition: vm_mngr.h:99
#define PyGetInt(item, value)
Definition: vm_mngr_py.c:58
struct memory_page_node * get_memory_page_from_address(vm_mngr_t *vm_mngr, uint64_t ad)
Definition: vm_mngr.c:126

+ Here is the call graph for this function:

static void VmMngr_dealloc ( VmMngr self)
static

Definition at line 513 of file vm_mngr_py.c.

514 {
515  vm_reset_memory_page_pool(self, NULL);
516  vm_reset_code_bloc_pool(self, NULL);
517  vm_reset_memory_breakpoint(self, NULL);
518  self->ob_type->tp_free((PyObject*)self);
519 }
PyObject * vm_reset_memory_page_pool(VmMngr *self, PyObject *args)
Definition: vm_mngr_py.c:410
PyObject * vm_reset_code_bloc_pool(VmMngr *self, PyObject *args)
Definition: vm_mngr_py.c:418
PyObject * vm_reset_memory_breakpoint(VmMngr *self, PyObject *args)
Definition: vm_mngr_py.c:348

+ Here is the call graph for this function:

static PyObject* VmMngr_get_vmmngr ( VmMngr self,
void *  closure 
)
static

Definition at line 532 of file vm_mngr_py.c.

533 {
534  return PyLong_FromUnsignedLongLong((uint64_t)&(self->vm_mngr));
535 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
static int VmMngr_init ( VmMngr self,
PyObject *  args,
PyObject *  kwds 
)
static

Definition at line 599 of file vm_mngr_py.c.

600 {
601  memset(&(self->vm_mngr), 0, sizeof(self->vm_mngr));
602  return 0;
603 }
vm_mngr_t vm_mngr
Definition: vm_mngr_py.h:9
static PyObject* VmMngr_new ( PyTypeObject *  type,
PyObject *  args,
PyObject *  kwds 
)
static

Definition at line 523 of file vm_mngr_py.c.

524 {
525  VmMngr *self;
526 
527  self = (VmMngr *)type->tp_alloc(type, 0);
528  return (PyObject *)self;
529 }
static int VmMngr_set_vmmngr ( VmMngr self,
PyObject *  value,
void *  closure 
)
static

Definition at line 538 of file vm_mngr_py.c.

539 {
540  PyErr_SetString(PyExc_TypeError, "immutable vmmngr");
541  return -1;
542 }

Variable Documentation

struct code_bloc_list_head code_bloc_pool
VmMngr* global_vmmngr

Definition at line 38 of file vm_mngr_py.c.

struct memory_page_list_head memory_page_pool
PyObject* Vm_Mngr_Error
static

Definition at line 661 of file vm_mngr_py.c.

PyGetSetDef VmMngr_getseters[]
static
Initial value:
= {
{"vmmngr",
"first name",
NULL},
{NULL}
}
static int VmMngr_set_vmmngr(VmMngr *self, PyObject *value, void *closure)
Definition: vm_mngr_py.c:538
static PyObject * VmMngr_get_vmmngr(VmMngr *self, void *closure)
Definition: vm_mngr_py.c:532

Definition at line 605 of file vm_mngr_py.c.

PyMemberDef VmMngr_members[]
static
Initial value:
= {
{NULL}
}

Definition at line 544 of file vm_mngr_py.c.

PyMethodDef VmMngr_methods[]
static

Definition at line 548 of file vm_mngr_py.c.

PyMethodDef VmMngr_Methods[]
static
Initial value:
= {
{NULL, NULL, 0, NULL}
}

Definition at line 656 of file vm_mngr_py.c.

PyTypeObject VmMngrType
static

Definition at line 613 of file vm_mngr_py.c.