summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2025-02-24 17:05:08 -0500
committerGlenn Smith <glenn@vector35.com>2025-03-05 16:39:59 -0500
commit4501746424590380578222766731587320816671 (patch)
tree3827cc7dc1c33b7a15f8c4d12400d4a6895a8ca2 /python
parent0964368357272921723837998074043356784550 (diff)
Python: Fix LLILInstr.copy_expr breaking with flags
Co-Authored-By: ltlly <a1253213025@163.com>
Diffstat (limited to 'python')
-rw-r--r--python/lowlevelil.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/python/lowlevelil.py b/python/lowlevelil.py
index 76ee18cf..3f2616b5 100644
--- a/python/lowlevelil.py
+++ b/python/lowlevelil.py
@@ -983,6 +983,10 @@ class LowLevelILInstruction(BaseILInstruction):
def flags(self) -> Optional['architecture.FlagWriteTypeName']:
return self.function.arch.get_flag_write_type_name(architecture.FlagWriteTypeIndex(self.instr.flags))
+ @property
+ def raw_flags(self) -> int:
+ return self.instr.flags
+
def _get_reg(self, operand_index: int) -> ILRegister:
return ILRegister(self.function.arch, architecture.RegisterIndex(self.instr.operands[operand_index]))
@@ -3779,7 +3783,7 @@ class LowLevelILFunction:
def expr(
self, operation, a: ExpressionIndex = 0, b: ExpressionIndex = 0, c: ExpressionIndex = 0, d: ExpressionIndex = 0, size: int = 0,
- flags: Optional[Union['architecture.FlagWriteTypeName', 'architecture.FlagType', 'architecture.FlagIndex']] = None,
+ flags: Optional[Union['architecture.FlagWriteTypeName', 'architecture.FlagType', 'architecture.FlagIndex', int]] = None,
source_location: Optional['ILSourceLocation'] = None
) -> ExpressionIndex:
_flags = architecture.FlagIndex(0)
@@ -3848,7 +3852,15 @@ class LowLevelILFunction:
:param LowLevelILInstruction original: the original IL Instruction you want to copy
:return: The index of the newly copied expression
"""
- return self.expr(original.operation, original.raw_operands[0], original.raw_operands[1], original.raw_operands[2], original.raw_operands[3], original.size, original.flags)
+ return self.expr(
+ original.operation,
+ original.raw_operands[0],
+ original.raw_operands[1],
+ original.raw_operands[2],
+ original.raw_operands[3],
+ original.size,
+ original.raw_flags
+ )
def replace_expr(self, original: InstructionOrExpression, new: InstructionOrExpression) -> None:
"""