diff options
| -rw-r--r-- | miasm2/jitter/vm_mngr.c | 45 | ||||
| -rw-r--r-- | miasm2/jitter/vm_mngr.h | 2 | ||||
| -rw-r--r-- | miasm2/jitter/vm_mngr_py.c | 22 |
3 files changed, 42 insertions, 27 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c index ec7fa01c..23464bfb 100644 --- a/miasm2/jitter/vm_mngr.c +++ b/miasm2/jitter/vm_mngr.c @@ -132,7 +132,6 @@ struct memory_page_node * get_memory_page_from_address(vm_mngr_t* vm_mngr, uint6 return mpn; fprintf(stderr, "WARNING: address 0x%"PRIX64" is not mapped in virtual memory:\n", ad); - //dump_memory_page_pool(); //dump_gpregs(); //exit(-1); vm_mngr->exception_flags |= EXCEPT_ACCESS_VIOL; @@ -146,7 +145,6 @@ struct memory_page_node * get_memory_page_from_address(vm_mngr_t* vm_mngr, uint6 return mpn; } fprintf(stderr, "WARNING: address 0x%"PRIX64" is not mapped in virtual memory:\n", ad); - //dump_memory_page_pool(); //dump_gpregs(); //exit(-1); vm_mngr->exception_flags |= EXCEPT_ACCESS_VIOL; @@ -214,7 +212,6 @@ static uint64_t memory_page_read(vm_mngr_t* vm_mngr, unsigned int my_size, uint6 unsigned int new_size = my_size; int index = 0; //fprintf(stderr, "read multiple page! %"PRIX64" %d\n", ad, new_size); - //dump_memory_page_pool(vm_mngr); while (new_size){ mpn = get_memory_page_from_address(vm_mngr, ad); if (!mpn) @@ -299,7 +296,6 @@ static void memory_page_write(vm_mngr_t* vm_mngr, unsigned int my_size, /* write is multiple page wide */ else{ //fprintf(stderr, "write multiple page! %"PRIX64" %d\n", ad, my_size); - //dump_memory_page_pool(vm_mngr); switch(my_size){ case 8: @@ -1488,20 +1484,43 @@ void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a) } -void dump_memory_page_pool(vm_mngr_t* vm_mngr) +/* + Return a char* representing the repr of vm_mngr_t object +*/ +char* dump(vm_mngr_t* vm_mngr) { + char buf[100]; + int length; + int total_len = 0; + char *buf_final; struct memory_page_node * mpn; + buf_final = malloc(1); + if (buf_final == NULL) { + printf("cannot alloc\n"); + exit(0); + } + buf_final[0] = '\x00'; LIST_FOREACH(mpn, &vm_mngr->memory_page_pool, next){ - printf("ad %"PRIX64" size %"PRIX64" %c%c%c hpad %p\n", - mpn->ad, - mpn->size, - mpn->access & PAGE_READ? 'R':'_', - mpn->access & PAGE_WRITE? 'W':'_', - mpn->access & PAGE_EXEC? 'X':'_', - mpn->ad_hp - ); + + length = snprintf(buf, sizeof(buf), + "ad 0x%"PRIX64" size 0x%"PRIX64" %c%c%c\n", + (uint64_t)mpn->ad, + (uint64_t)mpn->size, + mpn->access & PAGE_READ? 'R':'_', + mpn->access & PAGE_WRITE? 'W':'_', + mpn->access & PAGE_EXEC? 'X':'_' + ); + total_len += length+1; + buf_final = realloc(buf_final, total_len); + if (buf_final == NULL) { + printf("cannot alloc\n"); + exit(0); + } + strcat(buf_final, buf); } + + return buf_final; } void dump_memory_breakpoint_pool(vm_mngr_t* vm_mngr) diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h index 72c64319..fc346cc5 100644 --- a/miasm2/jitter/vm_mngr.h +++ b/miasm2/jitter/vm_mngr.h @@ -248,7 +248,7 @@ void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn); void check_write_code_bloc(vm_mngr_t* vm_mngr, uint64_t my_size, uint64_t addr); -void dump_memory_page_pool(vm_mngr_t* vm_mngr); +char* dump(vm_mngr_t* vm_mngr); void dump_memory_breakpoint_pool(vm_mngr_t* vm_mngr); //PyObject* _vm_get_all_memory(void); PyObject* addr2BlocObj(vm_mngr_t* vm_mngr, uint64_t addr); diff --git a/miasm2/jitter/vm_mngr_py.c b/miasm2/jitter/vm_mngr_py.c index 78d636f6..9894fd02 100644 --- a/miasm2/jitter/vm_mngr_py.c +++ b/miasm2/jitter/vm_mngr_py.c @@ -353,16 +353,15 @@ PyObject* vm_reset_memory_breakpoint(VmMngr* self, PyObject* args) } - - - - - -PyObject* vm_dump_memory_page_pool(VmMngr* self, PyObject* args) +PyObject *vm_dump(PyObject* self) { - dump_memory_page_pool(&self->vm_mngr); - Py_INCREF(Py_None); - return Py_None; + char* buf_final; + PyObject* ret_obj; + + buf_final = dump(&((VmMngr* )self)->vm_mngr); + ret_obj = PyString_FromString(buf_final); + free(buf_final); + return ret_obj; } PyObject* vm_dump_memory_breakpoint(VmMngr* self, PyObject* args) @@ -571,8 +570,6 @@ static PyMethodDef VmMngr_methods[] = { "X"}, {"set_exception", (PyCFunction)vm_set_exception, METH_VARARGS, "X"}, - {"dump_memory_page_pool", (PyCFunction)vm_dump_memory_page_pool, METH_VARARGS, - "X"}, {"dump_memory_breakpoint", (PyCFunction)vm_dump_memory_breakpoint, METH_VARARGS, "X"}, {"get_all_memory",(PyCFunction)vm_get_all_memory, METH_VARARGS, @@ -613,7 +610,6 @@ static PyGetSetDef VmMngr_getseters[] = { {NULL} /* Sentinel */ }; - static PyTypeObject VmMngrType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ @@ -625,7 +621,7 @@ static PyTypeObject VmMngrType = { 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ - 0, /*tp_repr*/ + vm_dump, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ |