diff options
Diffstat (limited to 'miasm2/jitter/vm_mngr.c')
| -rw-r--r-- | miasm2/jitter/vm_mngr.c | 45 |
1 files changed, 32 insertions, 13 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) |