about summary refs log tree commit diff stats
path: root/miasm2/jitter/jitload.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/jitter/jitload.py')
-rw-r--r--miasm2/jitter/jitload.py46
1 files changed, 28 insertions, 18 deletions
diff --git a/miasm2/jitter/jitload.py b/miasm2/jitter/jitload.py
index 59c7ac97..3f3cf10f 100644
--- a/miasm2/jitter/jitload.py
+++ b/miasm2/jitter/jitload.py
@@ -1,9 +1,10 @@
-
 import logging
 import warnings
 from functools import wraps
 from collections import Sequence, namedtuple
 
+from future.utils import viewitems
+
 from miasm2.jitter.csts import *
 from miasm2.core.utils import *
 from miasm2.core.bin_stream import bin_stream_vm
@@ -42,12 +43,15 @@ def named_arguments(func):
             ret_ad, arg_vals = func(self, len(args))
             arg_vals = namedtuple("args", args)(*arg_vals)
             # func_name(arguments) return address
-            log_func.info('%s(%s) ret addr: %s',
-                          get_caller_name(1),
-                          ', '.join("%s=0x%x" % (field, value)
-                                    for field, value in arg_vals._asdict(
-                                    ).iteritems()),
-                         hex(ret_ad))
+            log_func.info(
+                '%s(%s) ret addr: %s',
+                get_caller_name(1),
+                ', '.join(
+                    "%s=0x%x" % (field, value)
+                    for field, value in viewitems(arg_vals._asdict())
+                ),
+                hex(ret_ad)
+            )
             return ret_ad, namedtuple("args", args)(*arg_vals)
         else:
             ret_ad, arg_vals = func(self, args)
@@ -86,7 +90,7 @@ class CallbackHandler(object):
         Return the list of empty keys (removed)"""
 
         to_check = set()
-        for key, cb_list in self.callbacks.items():
+        for key, cb_list in viewitems(self.callbacks):
             try:
                 cb_list.remove(callback)
                 to_check.add(key)
@@ -145,7 +149,7 @@ class CallbackHandlerBitflag(CallbackHandler):
                         yield res
 
 
-class ExceptionHandle():
+class ExceptionHandle(object):
 
     "Return type for exception handler"
 
@@ -326,7 +330,7 @@ class Jitter(object):
 
         return self.jit.run_at(
             self.cpu, pc,
-            set(self.breakpoints_handler.callbacks.keys())
+            set(self.breakpoints_handler.callbacks)
         )
 
     def runiter_once(self, pc):
@@ -398,7 +402,7 @@ class Jitter(object):
 
         while self.run:
             try:
-                return self.run_iterator.next()
+                return next(self.run_iterator)
             except StopIteration:
                 pass
 
@@ -411,7 +415,9 @@ class Jitter(object):
 
     def init_stack(self):
         self.vm.add_memory_page(
-            self.stack_base, PAGE_READ | PAGE_WRITE, "\x00" * self.stack_size,
+            self.stack_base,
+            PAGE_READ | PAGE_WRITE,
+            b"\x00" * self.stack_size,
             "Stack")
         sp = self.arch.getsp(self.attrib)
         setattr(self.cpu, sp.name, self.stack_base + self.stack_size)
@@ -430,7 +436,7 @@ class Jitter(object):
         l = 0
         tmp = addr
         while ((max_char is None or l < max_char) and
-               self.vm.get_mem(tmp, 1) != "\x00"):
+               self.vm.get_mem(tmp, 1) != b"\x00"):
             tmp += 1
             l += 1
         return self.vm.get_mem(addr, l)
@@ -442,21 +448,21 @@ class Jitter(object):
         l = 0
         tmp = addr
         while ((max_char is None or l < max_char) and
-               self.vm.get_mem(tmp, 2) != "\x00\x00"):
+               self.vm.get_mem(tmp, 2) != b"\x00\x00"):
             tmp += 2
             l += 2
         s = self.vm.get_mem(addr, l)
-        s = s[::2]  # TODO: real unicode decoding
+        s = s.decode("utf-16le")
         return s
 
     def set_str_ansi(self, addr, s):
         """Set an ansi string in memory"""
-        s = s + "\x00"
+        s = s + b"\x00"
         self.vm.set_mem(addr, s)
 
     def set_str_unic(self, addr, s):
         """Set an unicode string in memory"""
-        s = "\x00".join(list(s)) + '\x00' * 3
+        s = b"\x00".join(list(s)) + b'\x00' * 3
         self.vm.set_mem(addr, s)
 
     @staticmethod
@@ -492,7 +498,11 @@ class Jitter(object):
             user_globals = {}
 
         self.libs = libs
-        self.user_globals = user_globals
+        out = {}
+        for name, func in viewitems(user_globals):
+            name = force_bytes(name)
+            out[name] = func
+        self.user_globals = out
 
         for f_addr in libs.fad2cname:
             self.handle_function(f_addr)