diff options
| -rw-r--r-- | miasm2/jitter/vm_mngr.c | 10 | ||||
| -rw-r--r-- | miasm2/jitter/vm_mngr.h | 2 |
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; |