about summary refs log tree commit diff stats
path: root/miasm2/jitter/jitcore.py
diff options
context:
space:
mode:
authorserpilliere <fabrice.desclaux@cea.fr>2015-04-05 23:48:24 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2015-04-22 11:31:21 +0200
commit65feb2335c3fd525efde115932b512e7bbc720d1 (patch)
treed945f7f094beb6be3c822b67d06bb888f2e67712 /miasm2/jitter/jitcore.py
parente6676c92ea2ea3e1f69c10902313094c1b83e375 (diff)
downloadmiasm-65feb2335c3fd525efde115932b512e7bbc720d1.tar.gz
miasm-65feb2335c3fd525efde115932b512e7bbc720d1.zip
Jitter: get/set mem is now wrapped in cpu
The get/set mem used during jit is wrapped by cpu. This allows cpu object to
callback (or not, depending on arch) a cache update.
Diffstat (limited to 'miasm2/jitter/jitcore.py')
-rw-r--r--miasm2/jitter/jitcore.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/miasm2/jitter/jitcore.py b/miasm2/jitter/jitcore.py
index 16f201c9..cf3bf7ae 100644
--- a/miasm2/jitter/jitcore.py
+++ b/miasm2/jitter/jitcore.py
@@ -51,6 +51,7 @@ class JitCore(object):
         self.blocs_mem_interval = interval()
         self.disasm_cb = None
         self.split_dis = set()
+        self.addr_mod = interval()
 
         self.options = {"jit_maxline": 50  # Maximum number of line jitted
                         }
@@ -249,13 +250,17 @@ class JitCore(object):
 
         return modified_blocs
 
-    def updt_automod_code(self, vm, addr, size):
+    def updt_automod_code(self, vm):
         """Remove code jitted in range [addr, addr + size]
         @vm: VmMngr instance
         @addr: Address of modified code in sandbox
         @size: Modification range size (in bits)
         """
-
-        self.del_bloc_in_range(addr, addr + size / 8)
+        for addr_start, addr_stop in self.addr_mod:
+            self.del_bloc_in_range(addr_start, addr_stop+1)
         self.__updt_jitcode_mem_range(vm)
+        self.addr_mod = interval()
 
+    def automod_cb(self, addr=0, size=0):
+        self.addr_mod+= interval([(addr, addr+size/8 - 1)])
+        return None