From e1bee9f8e8d15fd9e8252e4aac2edfe57d5ca2fc Mon Sep 17 00:00:00 2001 From: Clement Rouault Date: Fri, 26 Jun 2015 11:08:53 +0200 Subject: [PATCH] Commit simple_x86 before full rewriting --- native_exec/simple_x64.py | 29 ++++++++++++++++++++--------- native_exec/simple_x86.py | 27 +++++++++++++++++++++------ 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/native_exec/simple_x64.py b/native_exec/simple_x64.py index f970e6e..7199bed 100644 --- a/native_exec/simple_x64.py +++ b/native_exec/simple_x64.py @@ -3,7 +3,8 @@ import struct import sys -from simple_x86 import MultipleInstr +import codecs +from .simple_x86 import MultipleInstr # This code should really be rewritten.. @@ -11,6 +12,8 @@ this_module = sys.modules[__name__] generated_instruction = [] +long = int + def add_instruction(name, instruction): generated_instruction.append((name, instruction)) setattr(this_module, name, instruction) @@ -22,6 +25,12 @@ def generate_module_doc(): this_module.__doc__ = "\n".join(doc_lines) +def decode_hex(s): + return codecs.decode(s.encode(), "hex").decode() + +def encode_hex(s): + return codecs.encode(s.encode(), "hex").decode() + reg_order = ['EAX', 'ECX', 'EDX', 'EBX', 'ESP', 'EBP', 'ESI', 'EDI'] reg_opcode = {v : format(i, "03b") for i, v in enumerate(reg_order)} @@ -52,12 +61,14 @@ class X64Instruction(object): raise ValueError("{0} bindings must be between 0 and 0xffffffffffffffff".format(self.__class__.__name__)) def get_unbinded_code(self): - return self.code.replace(" ", "").decode('hex') + return decode_hex(self.code.replace(" ", "")) def get_code(self): code = self.get_unbinded_code() for i in range(self.biding): - code = code.replace((str(i + 1) * 16).decode('hex'), struct.pack("