about summary refs log tree commit diff stats
path: root/miasm2/jitter/vm_mngr.c
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2015-07-16 13:13:08 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2015-07-16 13:13:46 +0200
commitc03edceec59d28244efe88d0db2cf369f5c37953 (patch)
treeee3510ecac32e1947e5f6ece4a2c0a3b5a51a361 /miasm2/jitter/vm_mngr.c
parent1d4e9e59a10dcf9a708c8ec0f7c795195917e379 (diff)
downloadmiasm-c03edceec59d28244efe88d0db2cf369f5c37953.tar.gz
miasm-c03edceec59d28244efe88d0db2cf369f5c37953.zip
Jitter: replace vm.dump_memory_page_pool by its __repr__
Diffstat (limited to 'miasm2/jitter/vm_mngr.c')
-rw-r--r--miasm2/jitter/vm_mngr.c45
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)