@@ -83,56 +83,46 @@ def dis_chunk(chunk):
83
83
print (lua_opcode_names [i ['OPCODE' ]], i ['A' ], - i ['Bx' ]- 1 )
84
84
elif (i ['TYPE' ] == "AsBx" ):
85
85
print ("AsBx" , lua_opcode_names [i ['OPCODE' ]], i ['A' ], i ['sBx' ])
86
+
87
+ def loadBlock (self , sz ):
88
+ temp = bytearray (self .bytecode [self .index :self .index + sz ])
89
+ self .index = self .index + sz
90
+ return temp
86
91
87
92
def get_byte (self ):
88
- b = self .bytecode [self .index ]
89
- self .index = self .index + 1
90
- return b
93
+ return self .loadBlock (1 )[0 ]
91
94
92
95
def get_int32 (self ):
93
- i = 0
94
96
if (self .big_endian ):
95
- i = int .from_bytes (self .bytecode [ self . index : self . index + 4 ] , byteorder = 'big' , signed = False )
97
+ return int .from_bytes (self .loadBlock ( 4 ) , byteorder = 'big' , signed = False )
96
98
else :
97
- i = int .from_bytes (self .bytecode [self .index :self .index + 4 ], byteorder = 'little' , signed = False )
98
- self .index = self .index + self .int_size
99
- return i
99
+ return int .from_bytes (self .loadBlock (4 ), byteorder = 'little' , signed = False )
100
100
101
101
def get_int (self ):
102
- i = 0
103
102
if (self .big_endian ):
104
- i = int .from_bytes (self .bytecode [ self .index : self . index + self . int_size ] , byteorder = 'big' , signed = False )
103
+ return int .from_bytes (self .loadBlock ( self .int_size ) , byteorder = 'big' , signed = False )
105
104
else :
106
- i = int .from_bytes (self .bytecode [self .index :self .index + self .int_size ], byteorder = 'little' , signed = False )
107
- self .index = self .index + self .int_size
108
- return i
105
+ return int .from_bytes (self .loadBlock (self .int_size ), byteorder = 'little' , signed = False )
109
106
110
107
def get_size_t (self ):
111
- s = ''
112
108
if (self .big_endian ):
113
- s = int .from_bytes (self .bytecode [ self .index : self . index + self . size_t ] , byteorder = 'big' , signed = False )
109
+ return int .from_bytes (self .loadBlock ( self .size_t ) , byteorder = 'big' , signed = False )
114
110
else :
115
- s = int .from_bytes (self .bytecode [self .index :self .index + self .size_t ], byteorder = 'little' , signed = False )
116
- self .index = self .index + self .size_t
117
- return s
111
+ return int .from_bytes (self .loadBlock (self .size_t ), byteorder = 'little' , signed = False )
118
112
119
113
def get_double (self ):
120
114
if self .big_endian :
121
- f = struct .unpack ('>d' , bytearray ( self .bytecode [ self . index : self . index + 8 ]))
115
+ return struct .unpack ('>d' , self .loadBlock ( 8 ))[ 0 ]
122
116
else :
123
- f = struct .unpack ('<d' , bytearray (self .bytecode [self .index :self .index + 8 ]))
124
- self .index = self .index + 8
125
- return f [0 ]
117
+ return struct .unpack ('<d' , self .loadBlock (8 ))[0 ]
126
118
127
119
def get_string (self , size ):
128
120
if (size == None ):
129
121
size = self .get_size_t ()
130
122
if (size == 0 ):
131
123
return None
132
-
133
- s = "" .join (chr (x ) for x in self .bytecode [self .index :self .index + size ])
134
- self .index = self .index + size
135
- return s
124
+
125
+ return "" .join (chr (x ) for x in self .loadBlock (size ))
136
126
137
127
def decode_chunk (self ):
138
128
chunk = {
@@ -261,7 +251,6 @@ def decode_bytecode(self, bytecode):
261
251
self .instr_size = self .get_byte () # gets size of instructions
262
252
self .l_number_size = self .get_byte () # size of lua_Number
263
253
self .integral_flag = self .get_byte ()
264
-
265
254
266
255
print ("Lua VM version: " , hex (self .vm_version ))
267
256
print ("Big Endian: " , self .big_endian )
0 commit comments