2323import ctypes
2424import abc
2525
26- # Binary Ninja components -- additional imports belong in the appropriate class
26+ # Binary Ninja components
2727from binaryninja import _binaryninjacore as core
2828from binaryninja .enums import (Endianness , ImplicitRegisterExtend , BranchType ,
2929 InstructionTextTokenType , LowLevelILFlagCondition , FlagRole )
3030import binaryninja
3131from binaryninja import log
32-
3332from binaryninja import lowlevelil
3433from binaryninja import types
3534from binaryninja import databuffer
3635from binaryninja import platform
3736from binaryninja import callingconvention
3837
3938# 2-3 compatibility
40- from six import with_metaclass
41- from six .moves import range
39+ from binaryninja import range
40+ from binaryninja import with_metaclass
41+
4242
4343class _ArchitectureMetaClass (type ):
4444
@@ -624,7 +624,7 @@ def _get_semantic_flag_group_name(self, ctxt, sem_group):
624624
625625 def _get_full_width_registers (self , ctxt , count ):
626626 try :
627- regs = self ._full_width_regs .values ()
627+ regs = list ( self ._full_width_regs .values () )
628628 count [0 ] = len (regs )
629629 reg_buf = (ctypes .c_uint * len (regs ))()
630630 for i in range (0 , len (regs )):
@@ -639,7 +639,7 @@ def _get_full_width_registers(self, ctxt, count):
639639
640640 def _get_all_registers (self , ctxt , count ):
641641 try :
642- regs = self ._regs_by_index .keys ()
642+ regs = list ( self ._regs_by_index .keys () )
643643 count [0 ] = len (regs )
644644 reg_buf = (ctypes .c_uint * len (regs ))()
645645 for i in range (0 , len (regs )):
@@ -654,7 +654,7 @@ def _get_all_registers(self, ctxt, count):
654654
655655 def _get_all_flags (self , ctxt , count ):
656656 try :
657- flags = self ._flags_by_index .keys ()
657+ flags = list ( self ._flags_by_index .keys () )
658658 count [0 ] = len (flags )
659659 flag_buf = (ctypes .c_uint * len (flags ))()
660660 for i in range (0 , len (flags )):
@@ -669,7 +669,7 @@ def _get_all_flags(self, ctxt, count):
669669
670670 def _get_all_flag_write_types (self , ctxt , count ):
671671 try :
672- write_types = self ._flag_write_types_by_index .keys ()
672+ write_types = list ( self ._flag_write_types_by_index .keys () )
673673 count [0 ] = len (write_types )
674674 type_buf = (ctypes .c_uint * len (write_types ))()
675675 for i in range (0 , len (write_types )):
@@ -684,7 +684,7 @@ def _get_all_flag_write_types(self, ctxt, count):
684684
685685 def _get_all_semantic_flag_classes (self , ctxt , count ):
686686 try :
687- sem_classes = self ._semantic_flag_classes_by_index .keys ()
687+ sem_classes = list ( self ._semantic_flag_classes_by_index .keys () )
688688 count [0 ] = len (sem_classes )
689689 class_buf = (ctypes .c_uint * len (sem_classes ))()
690690 for i in range (0 , len (sem_classes )):
@@ -699,7 +699,7 @@ def _get_all_semantic_flag_classes(self, ctxt, count):
699699
700700 def _get_all_semantic_flag_groups (self , ctxt , count ):
701701 try :
702- sem_groups = self ._semantic_flag_groups_by_index .keys ()
702+ sem_groups = list ( self ._semantic_flag_groups_by_index .keys () )
703703 count [0 ] = len (sem_groups )
704704 group_buf = (ctypes .c_uint * len (sem_groups ))()
705705 for i in range (0 , len (sem_groups )):
@@ -938,7 +938,7 @@ def _get_register_stack_name(self, ctxt, reg_stack):
938938
939939 def _get_all_register_stacks (self , ctxt , count ):
940940 try :
941- regs = self ._reg_stacks_by_index .keys ()
941+ regs = list ( self ._reg_stacks_by_index .keys () )
942942 count [0 ] = len (regs )
943943 reg_buf = (ctypes .c_uint * len (regs ))()
944944 for i in range (0 , len (regs )):
@@ -989,7 +989,7 @@ def _get_intrinsic_name(self, ctxt, intrinsic):
989989
990990 def _get_all_intrinsics (self , ctxt , count ):
991991 try :
992- regs = self ._intrinsics_by_index .keys ()
992+ regs = list ( self ._intrinsics_by_index .keys () )
993993 count [0 ] = len (regs )
994994 reg_buf = (ctypes .c_uint * len (regs ))()
995995 for i in range (0 , len (regs )):
@@ -2415,8 +2415,8 @@ def assemble(self, code, addr=0):
24152415
24162416 :param str code: string representation of the instructions to be assembled
24172417 :param int addr: virtual address that the instructions will be loaded at
2418- :return: the bytes for the assembled instructions or error string
2419- :rtype: (a tuple of instructions and empty string) or (or None and error string)
2418+ :return: the bytes for the assembled instructions
2419+ :rtype: Python3 - a 'bytes' object; Python2 - a 'str'
24202420 :Example:
24212421
24222422 >>> arch.assemble("je 10")
@@ -2426,8 +2426,11 @@ def assemble(self, code, addr=0):
24262426 result = databuffer .DataBuffer ()
24272427 errors = ctypes .c_char_p ()
24282428 if not core .BNAssemble (self .handle , code , addr , result .handle , errors ):
2429- return None , errors .value
2430- return str (result ), errors .value
2429+ raise ValueError ("Could not assemble" )
2430+ if isinstance (str (result ), bytes ):
2431+ return str (result )
2432+ else :
2433+ return bytes (result )
24312434
24322435 def is_never_branch_patch_available (self , data , addr ):
24332436 """
0 commit comments