diff --git a/luac.py b/luac.py index bb2ac81..9dd05be 100644 --- a/luac.py +++ b/luac.py @@ -83,56 +83,46 @@ class LuaCompiler: print(lua_opcode_names[i['OPCODE']], i['A'], -i['Bx']-1) elif (i['TYPE'] == "AsBx"): print("AsBx", lua_opcode_names[i['OPCODE']], i['A'], i['sBx']) + + def loadBlock(self, sz): + temp = bytearray(self.bytecode[self.index:self.index+sz]) + self.index = self.index + sz + return temp def get_byte(self): - b = self.bytecode[self.index] - self.index = self.index + 1 - return b + return self.loadBlock(1)[0] def get_int32(self): - i = 0 if (self.big_endian): - i = int.from_bytes(self.bytecode[self.index:self.index+4], byteorder='big', signed=False) + return int.from_bytes(self.loadBlock(4), byteorder='big', signed=False) else: - i = int.from_bytes(self.bytecode[self.index:self.index+4], byteorder='little', signed=False) - self.index = self.index + self.int_size - return i + return int.from_bytes(self.loadBlock(4), byteorder='little', signed=False) def get_int(self): - i = 0 if (self.big_endian): - i = int.from_bytes(self.bytecode[self.index:self.index+self.int_size], byteorder='big', signed=False) + return int.from_bytes(self.loadBlock(self.int_size), byteorder='big', signed=False) else: - i = int.from_bytes(self.bytecode[self.index:self.index+self.int_size], byteorder='little', signed=False) - self.index = self.index + self.int_size - return i + return int.from_bytes(self.loadBlock(self.int_size), byteorder='little', signed=False) def get_size_t(self): - s = '' if (self.big_endian): - s = int.from_bytes(self.bytecode[self.index:self.index+self.size_t], byteorder='big', signed=False) + return int.from_bytes(self.loadBlock(self.size_t), byteorder='big', signed=False) else: - s = int.from_bytes(self.bytecode[self.index:self.index+self.size_t], byteorder='little', signed=False) - self.index = self.index + self.size_t - return s + return int.from_bytes(self.loadBlock(self.size_t), byteorder='little', signed=False) def get_double(self): if self.big_endian: - f = struct.unpack('>d', bytearray(self.bytecode[self.index:self.index+8])) + return struct.unpack('>d', self.loadBlock(8))[0] else: - f = struct.unpack('