@@ -34,7 +34,12 @@ def extract_string_from_offset(f, offset, ios_version):
3434 else :
3535 f .seek (offset * 8 )
3636 len = struct .unpack ("<I" , f .read (4 ))[0 ]- 1
37- return '%s' % f .read (len )
37+ ret = f .read (len )
38+ try :
39+ ret = ret .decode ()
40+ except :
41+ pass
42+ return ret
3843
3944
4045def create_operation_nodes (infile , regex_list , num_operation_nodes ,
@@ -43,10 +48,10 @@ def create_operation_nodes(infile, regex_list, num_operation_nodes,
4348 operation_nodes = operation_node .build_operation_nodes (infile ,
4449 num_operation_nodes , ios_major_version )
4550 logger .info ("operation nodes" )
46-
51+
4752 for idx , node in enumerate (operation_nodes ):
4853 logger .info ("%d: %s" , idx , node .str_debug ())
49-
54+
5055 for n in operation_nodes :
5156 n .convert_filter (sandbox_filter .convert_filter_callback , infile ,
5257 regex_list , ios_major_version , keep_builtin_filters ,
@@ -211,7 +216,7 @@ def get_global_vars(f, vars_offset, num_vars, base_offset):
211216 len = struct .unpack ("<I" , f .read (4 ))[0 ]
212217 s = f .read (len - 1 )
213218 global_vars .append (s )
214- logger .info ("global variables are {:s}" .format (", " .join (s for s in global_vars )))
219+ logger .info ("global variables are {:s}" .format (", " .join (s . decode () for s in global_vars )))
215220 return global_vars
216221
217222def get_base_addr (f , ios_version ):
@@ -304,7 +309,7 @@ def main():
304309 re_table_offset = 12
305310 else :
306311 re_table_offset = struct .unpack ("<H" , f .read (2 ))[0 ]
307-
312+
308313 if get_ios_major_version (args .release ) >= 12 :
309314 f .seek (8 )
310315 re_table_count = struct .unpack ("<H" , f .read (2 ))[0 ]
@@ -319,7 +324,7 @@ def main():
319324 f .seek (re_table_offset )
320325 else :
321326 f .seek (re_table_offset * 8 )
322-
327+
323328 re_offsets_table = struct .unpack ("<%dH" % re_table_count , f .read (2 * re_table_count ))
324329 for offset in re_offsets_table :
325330 if get_ios_major_version (args .release ) >= 13 :
@@ -328,7 +333,7 @@ def main():
328333 else :
329334 f .seek (offset * 8 )
330335 re_length = struct .unpack ("<I" , f .read (4 ))[0 ]
331-
336+
332337 re = struct .unpack ("<%dB" % re_length , f .read (re_length ))
333338 logger .debug ("total_re_length: 0x%x" , re_length )
334339 re_debug_str = "re: [" , ", " .join ([hex (i ) for i in re ]), "]"
@@ -397,7 +402,7 @@ def main():
397402 break
398403 start = f .tell ()
399404 end = re_table_offset * 8
400- num_operation_nodes = (end - start ) / 8
405+ num_operation_nodes = (end - start ) // 8
401406 logger .info ("number of operation nodes: %u" % num_operation_nodes )
402407
403408 operation_nodes = create_operation_nodes (f , regex_list ,
@@ -489,7 +494,8 @@ def main():
489494 break
490495 start = f .tell ()
491496 end = re_table_offset * 8
492- num_operation_nodes = (end - start ) / 8
497+ # has to be int and not float
498+ num_operation_nodes = (end - start ) // 8
493499 logger .info ("number of operation nodes: %d ; start: %#x" % (num_operation_nodes , start ))
494500
495501 operation_nodes = create_operation_nodes (f , regex_list ,
0 commit comments