diff options
| -rw-r--r-- | python/highlevelil.py | 8 | ||||
| -rw-r--r-- | python/lowlevelil.py | 32 | ||||
| -rw-r--r-- | python/mediumlevelil.py | 23 |
3 files changed, 37 insertions, 26 deletions
diff --git a/python/highlevelil.py b/python/highlevelil.py index 60359a20..976ebc79 100644 --- a/python/highlevelil.py +++ b/python/highlevelil.py @@ -79,8 +79,8 @@ class HighLevelILOperationAndSize: def __repr__(self): if self.size == 0: - return f"<{self.operation.name}>" - return f"<{self.operation.name} {self.size}>" + return f"<HighLevelILOperationAndSize: {self.operation.name}>" + return f"<HighLevelILOperationAndSize: {self.operation.name} {self.size}>" @dataclass @@ -89,7 +89,7 @@ class GotoLabel: id: int def __repr__(self): - return f"<label: {self.name}>" + return f"<GotoLabel: {self.name}>" def __str__(self): return self.name @@ -351,7 +351,7 @@ class HighLevelILInstruction(BaseILInstruction): first_line += token.text if len(list(lines)) > 1: continuation = "..." - return f"<{self.operation.name}: {first_line}{continuation}>" + return f"<{self.__class__.__name__}: {first_line}{continuation}>" def __eq__(self, other: 'HighLevelILInstruction'): if not isinstance(other, HighLevelILInstruction): diff --git a/python/lowlevelil.py b/python/lowlevelil.py index 8f04600f..99000250 100644 --- a/python/lowlevelil.py +++ b/python/lowlevelil.py @@ -75,7 +75,7 @@ class ILRegister: index: 'architecture.RegisterIndex' def __repr__(self): - return f"<reg {self.name}>" + return f"<ILRegister: {self.name}>" def __str__(self): return self.name @@ -114,7 +114,7 @@ class ILRegisterStack: index: 'architecture.RegisterStackIndex' def __repr__(self): - return f"<reg-stack {self.name}>" + return f"<ILRegisterStack: {self.name}>" def __str__(self): return self.name @@ -137,7 +137,7 @@ class ILFlag: index: 'architecture.FlagIndex' def __repr__(self): - return f"<flag {self.name}>" + return f"<ILFlag: {self.name}>" def __str__(self): return self.name @@ -163,7 +163,7 @@ class ILSemanticFlagClass: index: 'architecture.SemanticClassIndex' def __repr__(self): - return self.name + return f"<ILSemanticFlagClass: {self.name}>" def __str__(self): return self.name @@ -182,7 +182,7 @@ class ILSemanticFlagGroup: index: 'architecture.SemanticGroupIndex' def __repr__(self): - return self.name + return f"<ILSemanticFlagGroup: {self.name}>" def __str__(self): return self.name @@ -201,7 +201,7 @@ class ILIntrinsic: index: 'architecture.IntrinsicIndex' def __repr__(self): - return self.name + return f"<ILIntrinsic: {self.name} - {self.arch}>" def __str__(self): return self.name @@ -227,7 +227,7 @@ class SSARegister: version: int def __repr__(self): - return f"<ssa {self.reg} version {self.version}>" + return f"<SSARegister: {self.reg} version {self.version}>" @dataclass(frozen=True) @@ -236,7 +236,7 @@ class SSARegisterStack: version: int def __repr__(self): - return f"<ssa {self.reg_stack} version {self.version}>" + return f"<SSARegisterStack: {self.reg_stack} version {self.version}>" @dataclass(frozen=True) @@ -245,7 +245,7 @@ class SSAFlag: version: int def __repr__(self): - return f"<ssa {self.flag} version {self.version}>" + return f"<SSAFlag {self.flag} version {self.version}>" @dataclass(frozen=True) @@ -254,7 +254,7 @@ class SSARegisterOrFlag: version: int def __repr__(self): - return f"<ssa {self.reg_or_flag} version {self.version}>" + return f"<SSARegisterOrFlag: {self.reg_or_flag} version {self.version}>" @dataclass(frozen=True) @@ -264,8 +264,8 @@ class LowLevelILOperationAndSize: def __repr__(self): if self.size == 0: - return f"<{self.operation.name}>" - return f"<{self.operation.name} {self.size}>" + return f"<LowLevelILOperationAndSize: {self.operation.name}>" + return f"<LowLevelILOperationAndSize: {self.operation.name} {self.size}>" @dataclass(frozen=True) @@ -492,7 +492,7 @@ class LowLevelILInstruction(BaseILInstruction): return result def __repr__(self): - return f"<llil: {self}>" + return f"<{self.__class__.__name__}: {self}>" def __eq__(self, other: 'LowLevelILInstruction') -> bool: if not isinstance(other, LowLevelILInstruction): @@ -3072,11 +3072,11 @@ class LowLevelILFunction: def __repr__(self): if self.source_function is not None and self.source_function.arch is not None: - return f"<llil func: {self.source_function.arch.name}@{self.source_function.start:#x}>" + return f"<{self.__class__.__name__}: {self.source_function.arch.name}@{self.source_function.start:#x}>" elif self.source_function is not None: - return f"<llil func: {self.source_function.start:#x}>" + return f"<{self.__class__.__name__}: {self.source_function.start:#x}>" else: - return "<llil func: anonymous>" + return f"<{self.__class__.__name__}: anonymous>" def __len__(self): return int(core.BNGetLowLevelILInstructionCount(self.handle)) diff --git a/python/mediumlevelil.py b/python/mediumlevelil.py index df5ae4a0..e781b1da 100644 --- a/python/mediumlevelil.py +++ b/python/mediumlevelil.py @@ -67,7 +67,7 @@ class SSAVariable: version: int def __repr__(self): - return f"<ssa {self.var} version {self.version}>" + return f"<SSAVariable: {self.var} version {self.version}>" @property def name(self) -> str: @@ -102,8 +102,8 @@ class MediumLevelILOperationAndSize: def __repr__(self): if self.size == 0: - return f"<{self.operation.name}>" - return f"<{self.operation.name} {self.size}>" + return f"<MediumLevelILOperationAndSize: {self.operation.name}>" + return f"<MediumLevelILOperationAndSize: {self.operation.name} {self.size}>" @dataclass(frozen=True) @@ -364,7 +364,7 @@ class MediumLevelILInstruction(BaseILInstruction): return result def __repr__(self): - return f"<mlil: {self}>" + return f"<{self.__class__.__name__}: {self}>" def __eq__(self, other: 'MediumLevelILInstruction') -> bool: if not isinstance(other, MediumLevelILInstruction): @@ -479,6 +479,11 @@ class MediumLevelILInstruction(BaseILInstruction): @property def tokens(self) -> TokenList: """MLIL tokens (read-only)""" + + # Special case for the helper instructions which don't have tokens + if isinstance(self, (MediumLevelILCallParam, MediumLevelILCallParamSsa)): + return [] + count = ctypes.c_ulonglong() tokens = ctypes.POINTER(core.BNInstructionTextToken)() assert self.function.arch is not None, f"type(self.function): {type(self.function)} " @@ -1246,6 +1251,9 @@ class MediumLevelILCallOutput(MediumLevelILInstruction): @dataclass(frozen=True, repr=False, eq=False) class MediumLevelILCallParam(MediumLevelILInstruction): + def __repr__(self): + return f"<MediumLevelILCallParam: {self.src}>" + @property def src(self) -> List[variable.Variable]: return self._get_var_list(0, 1) @@ -1806,6 +1814,9 @@ class MediumLevelILCallOutputSsa(MediumLevelILInstruction, SSA): @dataclass(frozen=True, repr=False, eq=False) class MediumLevelILCallParamSsa(MediumLevelILInstruction, SSA): + def __repr__(self): + return f"<MediumLevelILCallParamSsa: {self.src}>" + @property def src_memory(self) -> int: return self._get_int(0) @@ -2990,9 +3001,9 @@ class MediumLevelILFunction: def __repr__(self): arch = self.source_function.arch if arch: - return f"<mlil func: {arch.name}@{self.source_function.start:#x}>" + return f"<MediumLevelILFunction: {arch.name}@{self.source_function.start:#x}>" else: - return f"<mlil func: {self.source_function.start:#x}>" + return f"<MediumLevelILFunction: {self.source_function.start:#x}>" def __len__(self): return int(core.BNGetMediumLevelILInstructionCount(self.handle)) |
