about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/jitter/vm_mngr.c10
-rw-r--r--miasm2/jitter/vm_mngr.h2
2 files changed, 12 insertions, 0 deletions
diff --git a/miasm2/jitter/vm_mngr.c b/miasm2/jitter/vm_mngr.c
index 8df039b4..8022b32c 100644
--- a/miasm2/jitter/vm_mngr.c
+++ b/miasm2/jitter/vm_mngr.c
@@ -449,6 +449,7 @@ void add_mem_read(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t size)
 void add_mem_write(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t size)
 {
 	add_range_to_pylist(vm_mngr->memory_w, addr, addr + size);
+	vm_mngr->write_num++;
 }
 
 void check_invalid_code_blocs(vm_mngr_t* vm_mngr)
@@ -459,6 +460,9 @@ void check_invalid_code_blocs(vm_mngr_t* vm_mngr)
 	struct code_bloc_node * cbp;
 	uint64_t addr_start, addr_stop;
 
+	if (vm_mngr->write_num == 0)
+		return;
+
 	list_size = PyList_Size(vm_mngr->memory_w);
 
 	LIST_FOREACH(cbp, &vm_mngr->code_bloc_pool, next){
@@ -493,6 +497,9 @@ void check_memory_breakpoint(vm_mngr_t* vm_mngr)
 	uint64_t addr_start, addr_stop;
 	struct memory_breakpoint_info * memory_bp;
 
+	if (vm_mngr->write_num == 0)
+		return;
+
 	/* Check Write memory breakpoint */
 	list_size = PyList_Size(vm_mngr->memory_w);
 	LIST_FOREACH(memory_bp, &vm_mngr->memory_breakpoint_pool, next) {
@@ -1537,6 +1544,7 @@ void init_code_bloc_pool(vm_mngr_t* vm_mngr)
 
 	vm_mngr->memory_r = PyList_New(0);
 	vm_mngr->memory_w = PyList_New(0);
+	vm_mngr->write_num = 0;
 
 
 }
@@ -1583,6 +1591,8 @@ void reset_memory_access(vm_mngr_t* vm_mngr)
 
 	reset_pylist(vm_mngr->memory_w);
 	vm_mngr->memory_w = PyList_New(0);
+	vm_mngr->write_num = 0;
+
 }
 
 void reset_memory_breakpoint(vm_mngr_t* vm_mngr)
diff --git a/miasm2/jitter/vm_mngr.h b/miasm2/jitter/vm_mngr.h
index b6e7a7cf..fa264b27 100644
--- a/miasm2/jitter/vm_mngr.h
+++ b/miasm2/jitter/vm_mngr.h
@@ -94,6 +94,8 @@ typedef struct {
 	PyObject* memory_r;
 	PyObject* memory_w;
 
+	int write_num;
+
 }vm_mngr_t;