diff options
| author | Michael Krasnitski <michael.krasnitski@gmail.com> | 2024-02-11 18:40:23 -0500 |
|---|---|---|
| committer | Kyle Martin <krm504@nyu.edu> | 2024-03-18 17:46:37 -0400 |
| commit | e66a44d96a1de93978d7db6caa874a485e3088e2 (patch) | |
| tree | fd9867dac8254d6a9a8427a7d80e85236f611b72 /rust/src | |
| parent | 9939d850f0b8ccaf1ae048bcb5f788a6c3e606bf (diff) | |
Instantiate `HighLevelILInstruction` inline and remove constructors
Diffstat (limited to 'rust/src')
| -rw-r--r-- | rust/src/hlil/instruction.rs | 876 | ||||
| -rw-r--r-- | rust/src/hlil/operation.rs | 376 |
2 files changed, 492 insertions, 760 deletions
diff --git a/rust/src/hlil/instruction.rs b/rust/src/hlil/instruction.rs index 882bc60b..9d215d5c 100644 --- a/rust/src/hlil/instruction.rs +++ b/rust/src/hlil/instruction.rs @@ -1,9 +1,12 @@ +use binaryninjacore_sys::BNFromVariableIdentifier; use binaryninjacore_sys::BNGetHighLevelILByIndex; use binaryninjacore_sys::BNHighLevelILOperation; use crate::operand_iter::OperandIter; use crate::rc::Ref; -use crate::types::{ConstantData, ILIntrinsic, RegisterValue, RegisterValueType}; +use crate::types::{ + ConstantData, ILIntrinsic, RegisterValue, RegisterValueType, SSAVariable, Variable, +}; use super::operation::*; use super::{HighLevelILFunction, HighLevelILLiftedInstruction, HighLevelILLiftedInstructionKind}; @@ -146,334 +149,395 @@ impl HighLevelILInstruction { use BNHighLevelILOperation::*; use HighLevelILInstructionKind as Op; let kind = match op.operation { - HLIL_ADC => Op::Adc(BinaryOpCarry::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_SBB => Op::Sbb(BinaryOpCarry::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_RLC => Op::Rlc(BinaryOpCarry::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_RRC => Op::Rrc(BinaryOpCarry::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_ADD => Op::Add(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_SUB => Op::Sub(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_AND => Op::And(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_OR => Op::Or(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_XOR => Op::Xor(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_LSL => Op::Lsl(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_LSR => Op::Lsr(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ASR => Op::Asr(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ROL => Op::Rol(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ROR => Op::Ror(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MUL => Op::Mul(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MULU_DP => Op::MuluDp(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MULS_DP => Op::MulsDp(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_DIVU => Op::Divu(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_DIVU_DP => Op::DivuDp(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_DIVS => Op::Divs(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_DIVS_DP => Op::DivsDp(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MODU => Op::Modu(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MODU_DP => Op::ModuDp(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MODS => Op::Mods(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_MODS_DP => Op::ModsDp(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_E => Op::CmpE(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_NE => Op::CmpNe(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_SLT => Op::CmpSlt(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_ULT => Op::CmpUlt(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_SLE => Op::CmpSle(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_ULE => Op::CmpUle(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_SGE => Op::CmpSge(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_UGE => Op::CmpUge(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_SGT => Op::CmpSgt(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_CMP_UGT => Op::CmpUgt(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_TEST_BIT => Op::TestBit(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ADD_OVERFLOW => Op::AddOverflow(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FADD => Op::Fadd(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FSUB => Op::Fsub(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FMUL => Op::Fmul(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FDIV => Op::Fdiv(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_E => Op::FcmpE(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_NE => Op::FcmpNe(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_LT => Op::FcmpLt(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_LE => Op::FcmpLe(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_GE => Op::FcmpGe(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_GT => Op::FcmpGt(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_O => Op::FcmpO(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_FCMP_UO => Op::FcmpUo(BinaryOp::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ARRAY_INDEX => Op::ArrayIndex(ArrayIndex::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ARRAY_INDEX_SSA => Op::ArrayIndexSsa(ArrayIndexSsa::new( - op.operands[0] as usize, - op.operands[1], - op.operands[2] as usize, - )), - HLIL_ASSIGN => Op::Assign(Assign::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_ASSIGN_MEM_SSA => Op::AssignMemSsa(AssignMemSsa::new( - op.operands[0] as usize, - op.operands[1], - op.operands[2] as usize, - op.operands[3], - )), - HLIL_ASSIGN_UNPACK => Op::AssignUnpack(AssignUnpack::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_ASSIGN_UNPACK_MEM_SSA => Op::AssignUnpackMemSsa(AssignUnpackMemSsa::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2], - op.operands[3] as usize, - op.operands[4], - )), - HLIL_BLOCK => Op::Block(Block::new(op.operands[0] as usize, op.operands[1] as usize)), - HLIL_CALL => Op::Call(Call::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_TAILCALL => Op::Tailcall(Call::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_CALL_SSA => Op::CallSsa(CallSsa::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - op.operands[3], - op.operands[4], - )), - HLIL_CASE => Op::Case(Case::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_CONST => Op::Const(Const::new(op.operands[0])), - HLIL_CONST_PTR => Op::ConstPtr(Const::new(op.operands[0])), - HLIL_IMPORT => Op::Import(Const::new(op.operands[0])), - HLIL_CONST_DATA => Op::ConstData(ConstData::new( - op.operands[0] as u32, - op.operands[1] as i64, - op.size, - )), - HLIL_DEREF => Op::Deref(UnaryOp::new(op.operands[0] as usize)), - HLIL_ADDRESS_OF => Op::AddressOf(UnaryOp::new(op.operands[0] as usize)), - HLIL_NEG => Op::Neg(UnaryOp::new(op.operands[0] as usize)), - HLIL_NOT => Op::Not(UnaryOp::new(op.operands[0] as usize)), - HLIL_SX => Op::Sx(UnaryOp::new(op.operands[0] as usize)), - HLIL_ZX => Op::Zx(UnaryOp::new(op.operands[0] as usize)), - HLIL_LOW_PART => Op::LowPart(UnaryOp::new(op.operands[0] as usize)), - HLIL_BOOL_TO_INT => Op::BoolToInt(UnaryOp::new(op.operands[0] as usize)), - HLIL_UNIMPL_MEM => Op::UnimplMem(UnaryOp::new(op.operands[0] as usize)), - HLIL_FSQRT => Op::Fsqrt(UnaryOp::new(op.operands[0] as usize)), - HLIL_FNEG => Op::Fneg(UnaryOp::new(op.operands[0] as usize)), - HLIL_FABS => Op::Fabs(UnaryOp::new(op.operands[0] as usize)), - HLIL_FLOAT_TO_INT => Op::FloatToInt(UnaryOp::new(op.operands[0] as usize)), - HLIL_INT_TO_FLOAT => Op::IntToFloat(UnaryOp::new(op.operands[0] as usize)), - HLIL_FLOAT_CONV => Op::FloatConv(UnaryOp::new(op.operands[0] as usize)), - HLIL_ROUND_TO_INT => Op::RoundToInt(UnaryOp::new(op.operands[0] as usize)), - HLIL_FLOOR => Op::Floor(UnaryOp::new(op.operands[0] as usize)), - HLIL_CEIL => Op::Ceil(UnaryOp::new(op.operands[0] as usize)), - HLIL_FTRUNC => Op::Ftrunc(UnaryOp::new(op.operands[0] as usize)), - HLIL_DEREF_FIELD_SSA => Op::DerefFieldSsa(DerefFieldSsa::new( - op.operands[0] as usize, - op.operands[1], - op.operands[2], - op.operands[3], - )), - HLIL_DEREF_SSA => Op::DerefSsa(DerefSsa::new(op.operands[0] as usize, op.operands[1])), - HLIL_EXTERN_PTR => Op::ExternPtr(ExternPtr::new(op.operands[0], op.operands[1])), - HLIL_FLOAT_CONST => Op::FloatConst(FloatConst::new(op.operands[0], op.size)), - HLIL_FOR => Op::For(ForLoop::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - op.operands[3] as usize, - )), - HLIL_FOR_SSA => Op::ForSsa(ForLoopSsa::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - op.operands[3] as usize, - op.operands[4] as usize, - )), - HLIL_GOTO => Op::Goto(Label::new(op.operands[0])), - HLIL_LABEL => Op::Label(Label::new(op.operands[0])), - HLIL_IF => Op::If(If::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_INTRINSIC => Op::Intrinsic(Intrinsic::new( - op.operands[0] as u32, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_INTRINSIC_SSA => Op::IntrinsicSsa(IntrinsicSsa::new( - op.operands[0] as u32, - op.operands[1] as usize, - op.operands[2] as usize, - op.operands[3], - op.operands[4], - )), - HLIL_JUMP => Op::Jump(Jump::new(op.operands[0] as usize)), - HLIL_MEM_PHI => Op::MemPhi(MemPhi::new( - op.operands[0], - op.operands[1] as usize, - op.operands[2] as usize, - )), + HLIL_ADC => Op::Adc(BinaryOpCarry { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + carry: op.operands[2] as usize, + }), + HLIL_SBB => Op::Sbb(BinaryOpCarry { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + carry: op.operands[2] as usize, + }), + HLIL_RLC => Op::Rlc(BinaryOpCarry { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + carry: op.operands[2] as usize, + }), + HLIL_RRC => Op::Rrc(BinaryOpCarry { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + carry: op.operands[2] as usize, + }), + HLIL_ADD => Op::Add(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_SUB => Op::Sub(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_AND => Op::And(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_OR => Op::Or(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_XOR => Op::Xor(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_LSL => Op::Lsl(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_LSR => Op::Lsr(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_ASR => Op::Asr(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_ROL => Op::Rol(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_ROR => Op::Ror(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MUL => Op::Mul(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MULU_DP => Op::MuluDp(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MULS_DP => Op::MulsDp(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_DIVU => Op::Divu(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_DIVU_DP => Op::DivuDp(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_DIVS => Op::Divs(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_DIVS_DP => Op::DivsDp(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MODU => Op::Modu(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MODU_DP => Op::ModuDp(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MODS => Op::Mods(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_MODS_DP => Op::ModsDp(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_E => Op::CmpE(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_NE => Op::CmpNe(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_SLT => Op::CmpSlt(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_ULT => Op::CmpUlt(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_SLE => Op::CmpSle(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_ULE => Op::CmpUle(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_SGE => Op::CmpSge(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_UGE => Op::CmpUge(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_SGT => Op::CmpSgt(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_CMP_UGT => Op::CmpUgt(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_TEST_BIT => Op::TestBit(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_ADD_OVERFLOW => Op::AddOverflow(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FADD => Op::Fadd(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FSUB => Op::Fsub(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FMUL => Op::Fmul(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FDIV => Op::Fdiv(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_E => Op::FcmpE(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_NE => Op::FcmpNe(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_LT => Op::FcmpLt(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_LE => Op::FcmpLe(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_GE => Op::FcmpGe(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_GT => Op::FcmpGt(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_O => Op::FcmpO(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_FCMP_UO => Op::FcmpUo(BinaryOp { + left: op.operands[0] as usize, + right: op.operands[1] as usize, + }), + HLIL_ARRAY_INDEX => Op::ArrayIndex(ArrayIndex { + src: op.operands[0] as usize, + index: op.operands[1] as usize, + }), + HLIL_ARRAY_INDEX_SSA => Op::ArrayIndexSsa(ArrayIndexSsa { + src: op.operands[0] as usize, + src_memory: op.operands[1], + index: op.operands[2] as usize, + }), + HLIL_ASSIGN => Op::Assign(Assign { + dest: op.operands[0] as usize, + src: op.operands[1] as usize, + }), + HLIL_ASSIGN_MEM_SSA => Op::AssignMemSsa(AssignMemSsa { + dest: op.operands[0] as usize, + dest_memory: op.operands[1], + src: op.operands[2] as usize, + src_memory: op.operands[3], + }), + HLIL_ASSIGN_UNPACK => Op::AssignUnpack(AssignUnpack { + num_dests: op.operands[0] as usize, + first_dest: op.operands[1] as usize, + src: op.operands[2] as usize, + }), + HLIL_ASSIGN_UNPACK_MEM_SSA => Op::AssignUnpackMemSsa(AssignUnpackMemSsa { + num_dests: op.operands[0] as usize, + first_dest: op.operands[1] as usize, + dest_memory: op.operands[2], + src: op.operands[3] as usize, + src_memory: op.operands[4], + }), + HLIL_BLOCK => Op::Block(Block { + num_params: op.operands[0] as usize, + first_param: op.operands[1] as usize, + }), + HLIL_CALL => Op::Call(Call { + dest: op.operands[0] as usize, + num_params: op.operands[1] as usize, + first_param: op.operands[2] as usize, + }), + HLIL_TAILCALL => Op::Tailcall(Call { + dest: op.operands[0] as usize, + num_params: op.operands[1] as usize, + first_param: op.operands[2] as usize, + }), + HLIL_CALL_SSA => Op::CallSsa(CallSsa { + dest: op.operands[0] as usize, + num_params: op.operands[1] as usize, + first_param: op.operands[2] as usize, + dest_memory: op.operands[3], + src_memory: op.operands[4], + }), + HLIL_CASE => Op::Case(Case { + num_values: op.operands[0] as usize, + first_value: op.operands[1] as usize, + body: op.operands[2] as usize, + }), + HLIL_CONST => Op::Const(Const { + constant: op.operands[0], + }), + HLIL_CONST_PTR => Op::ConstPtr(Const { + constant: op.operands[0], + }), + HLIL_IMPORT => Op::Import(Const { + constant: op.operands[0], + }), + HLIL_CONST_DATA => Op::ConstData(ConstData { + constant_data_kind: op.operands[0] as u32, + constant_data_value: op.operands[1] as i64, + size: op.size, + }), + HLIL_DEREF => Op::Deref(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_ADDRESS_OF => Op::AddressOf(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_NEG => Op::Neg(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_NOT => Op::Not(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_SX => Op::Sx(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_ZX => Op::Zx(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_LOW_PART => Op::LowPart(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_BOOL_TO_INT => Op::BoolToInt(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_UNIMPL_MEM => Op::UnimplMem(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FSQRT => Op::Fsqrt(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FNEG => Op::Fneg(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FABS => Op::Fabs(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FLOAT_TO_INT => Op::FloatToInt(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_INT_TO_FLOAT => Op::IntToFloat(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FLOAT_CONV => Op::FloatConv(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_ROUND_TO_INT => Op::RoundToInt(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FLOOR => Op::Floor(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_CEIL => Op::Ceil(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_FTRUNC => Op::Ftrunc(UnaryOp { + src: op.operands[0] as usize, + }), + HLIL_DEREF_FIELD_SSA => Op::DerefFieldSsa(DerefFieldSsa { + src: op.operands[0] as usize, + src_memory: op.operands[1], + offset: op.operands[2], + member_index: get_member_index(op.operands[3]), + }), + HLIL_DEREF_SSA => Op::DerefSsa(DerefSsa { + src: op.operands[0] as usize, + src_memory: op.operands[1], + }), + HLIL_EXTERN_PTR => Op::ExternPtr(ExternPtr { + constant: op.operands[0], + offset: op.operands[1], + }), + HLIL_FLOAT_CONST => Op::FloatConst(FloatConst { + constant: get_float(op.operands[0], op.size), + }), + HLIL_FOR => Op::For(ForLoop { + init: op.operands[0] as usize, + condition: op.operands[1] as usize, + update: op.operands[2] as usize, + body: op.operands[3] as usize, + }), + HLIL_FOR_SSA => Op::ForSsa(ForLoopSsa { + init: op.operands[0] as usize, + condition_phi: op.operands[1] as usize, + condition: op.operands[2] as usize, + update: op.operands[3] as usize, + body: op.operands[4] as usize, + }), + HLIL_GOTO => Op::Goto(Label { + target: op.operands[0], + }), + HLIL_LABEL => Op::Label(Label { + target: op.operands[0], + }), + HLIL_IF => Op::If(If { + condition: op.operands[0] as usize, + cond_true: op.operands[1] as usize, + cond_false: op.operands[2] as usize, + }), + HLIL_INTRINSIC => Op::Intrinsic(Intrinsic { + intrinsic: op.operands[0] as u32, + num_params: op.operands[1] as usize, + first_param: op.operands[2] as usize, + }), + HLIL_INTRINSIC_SSA => Op::IntrinsicSsa(IntrinsicSsa { + intrinsic: op.operands[0] as u32, + num_params: op.operands[1] as usize, + first_param: op.operands[2] as usize, + dest_memory: op.operands[3], + src_memory: op.operands[4], + }), + HLIL_JUMP => Op::Jump(Jump { + dest: op.operands[0] as usize, + }), + HLIL_MEM_PHI => Op::MemPhi(MemPhi { + dest: op.operands[0], + num_srcs: op.operands[1] as usize, + first_src: op.operands[2] as usize, + }), HLIL_NOP => Op::Nop, HLIL_BREAK => Op::Break, HLIL_CONTINUE => Op::Continue, @@ -482,62 +546,83 @@ impl HighLevelILInstruction { HLIL_BP => Op::Bp, HLIL_UNDEF => Op::Undef, HLIL_UNIMPL => Op::Unimpl, - HLIL_RET => Op::Ret(Ret::new(op.operands[0] as usize, op.operands[1] as usize)), - HLIL_SPLIT => Op::Split(Split::new(op.operands[0] as usize, op.operands[1] as usize)), - HLIL_STRUCT_FIELD => Op::StructField(StructField::new( - op.operands[0] as usize, - op.operands[1], - op.operands[2], - )), - HLIL_DEREF_FIELD => Op::DerefField(StructField::new( - op.operands[0] as usize, - op.operands[1], - op.operands[2], - )), - HLIL_SWITCH => Op::Switch(Switch::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - op.operands[3] as usize, - )), - HLIL_SYSCALL => Op::Syscall(Syscall::new( - op.operands[0] as usize, - op.operands[1] as usize, - )), - HLIL_SYSCALL_SSA => Op::SyscallSsa(SyscallSsa::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2], - op.operands[3], - )), - HLIL_TRAP => Op::Trap(Trap::new(op.operands[0])), - HLIL_VAR_DECLARE => Op::VarDeclare(Var::new(op.operands[0])), - HLIL_VAR => Op::Var(Var::new(op.operands[0])), - HLIL_VAR_INIT => Op::VarInit(VarInit::new(op.operands[0], op.operands[1] as usize)), - HLIL_VAR_INIT_SSA => Op::VarInitSsa(VarInitSsa::new( - (op.operands[0], op.operands[1] as usize), - op.operands[2] as usize, - )), - HLIL_VAR_PHI => Op::VarPhi(VarPhi::new( - (op.operands[0], op.operands[1] as usize), - op.operands[2] as usize, - op.operands[3] as usize, - )), - HLIL_VAR_SSA => Op::VarSsa(VarSsa::new((op.operands[0], op.operands[1] as usize))), - HLIL_WHILE => Op::While(While::new(op.operands[0] as usize, op.operands[1] as usize)), - HLIL_DO_WHILE => { - Op::DoWhile(While::new(op.operands[0] as usize, op.operands[1] as usize)) - } - HLIL_WHILE_SSA => Op::WhileSsa(WhileSsa::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), - HLIL_DO_WHILE_SSA => Op::DoWhileSsa(WhileSsa::new( - op.operands[0] as usize, - op.operands[1] as usize, - op.operands[2] as usize, - )), + HLIL_RET => Op::Ret(Ret { + num_srcs: op.operands[0] as usize, + first_src: op.operands[1] as usize, + }), + HLIL_SPLIT => Op::Split(Split { + high: op.operands[0] as usize, + low: op.operands[1] as usize, + }), + HLIL_STRUCT_FIELD => Op::StructField(StructField { + src: op.operands[0] as usize, + offset: op.operands[1], + member_index: get_member_index(op.operands[2]), + }), + HLIL_DEREF_FIELD => Op::DerefField(StructField { + src: op.operands[0] as usize, + offset: op.operands[1], + member_index: get_member_index(op.operands[2]), + }), + HLIL_SWITCH => Op::Switch(Switch { + condition: op.operands[0] as usize, + default: op.operands[1] as usize, + num_cases: op.operands[2] as usize, + first_case: op.operands[3] as usize, + }), + HLIL_SYSCALL => Op::Syscall(Syscall { + num_params: op.operands[0] as usize, + first_param: op.operands[1] as usize, + }), + HLIL_SYSCALL_SSA => Op::SyscallSsa(SyscallSsa { + num_params: op.operands[0] as usize, + first_param: op.operands[1] as usize, + dest_memory: op.operands[2], + src_memory: op.operands[3], + }), + HLIL_TRAP => Op::Trap(Trap { + vector: op.operands[0], + }), + HLIL_VAR_DECLARE => Op::VarDeclare(Var { + var: get_var(op.operands[0]), + }), + HLIL_VAR => Op::Var(Var { + var: get_var(op.operands[0]), + }), + HLIL_VAR_INIT => Op::VarInit(VarInit { + dest: get_var(op.operands[0]), + src: op.operands[1] as usize, + }), + HLIL_VAR_INIT_SSA => Op::VarInitSsa(VarInitSsa { + dest: get_var_ssa((op.operands[0], op.operands[1] as usize)), + src: op.operands[2] as usize, + }), + HLIL_VAR_PHI => Op::VarPhi(VarPhi { + dest: get_var_ssa((op.operands[0], op.operands[1] as usize)), + num_srcs: op.operands[2] as usize, + first_src: op.operands[3] as usize, + }), + HLIL_VAR_SSA => Op::VarSsa(VarSsa { + var: get_var_ssa((op.operands[0], op.operands[1] as usize)), + }), + HLIL_WHILE => Op::While(While { + condition: op.operands[0] as usize, + body: op.operands[1] as usize, + }), + HLIL_DO_WHILE => Op::DoWhile(While { + condition: op.operands[0] as usize, + body: op.operands[1] as usize, + }), + HLIL_WHILE_SSA => Op::WhileSsa(WhileSsa { + condition_phi: op.operands[0] as usize, + condition: op.operands[1] as usize, + body: op.operands[2] as usize, + }), + HLIL_DO_WHILE_SSA => Op::DoWhileSsa(WhileSsa { + condition_phi: op.operands[0] as usize, + condition: op.operands[1] as usize, + body: op.operands[2] as usize, + }), }; Self { function, @@ -874,3 +959,24 @@ impl core::fmt::Debug for HighLevelILInstruction { ) } } + +fn get_float(value: u64, size: usize) -> f64 { + match size { + 4 => f32::from_bits(value as u32) as f64, + 8 => f64::from_bits(value), + // TODO how to handle this value? + size => todo!("float size {}", size), + } +} + +fn get_var(id: u64) -> Variable { + unsafe { Variable::from_raw(BNFromVariableIdentifier(id)) } +} + +fn get_member_index(idx: u64) -> Option<usize> { + (idx as i64 > 0).then_some(idx as usize) +} + +fn get_var_ssa(input: (u64, usize)) -> SSAVariable { + SSAVariable::new(get_var(input.0), input.1) +} diff --git a/rust/src/hlil/operation.rs b/rust/src/hlil/operation.rs index eeb322e3..a98a7d32 100644 --- a/rust/src/hlil/operation.rs +++ b/rust/src/hlil/operation.rs @@ -1,4 +1,3 @@ -use binaryninjacore_sys::BNFromVariableIdentifier; use binaryninjacore_sys::BNGetGotoLabelName; use crate::function::Function; @@ -7,29 +6,6 @@ use crate::types::{ConstantData, ILIntrinsic, SSAVariable, Variable}; use super::HighLevelILLiftedInstruction; -fn get_float(value: u64, size: usize) -> f64 { - match size { - 4 => f32::from_bits(value as u32) as f64, - 8 => f64::from_bits(value), - // TODO how to handle this value? - size => todo!("float size {}", size), - } -} - -fn get_var(id: u64) -> Variable { - unsafe { Variable::from_raw(BNFromVariableIdentifier(id)) } -} - -fn get_member_index(idx: u64) -> Option<usize> { - (idx as i64 > 0).then_some(idx as usize) -} - -fn get_var_ssa(input: (u64, usize)) -> SSAVariable { - let raw = unsafe { BNFromVariableIdentifier(input.0) }; - let var = unsafe { Variable::from_raw(raw) }; - SSAVariable::new(var, input.1) -} - #[derive(Clone, Debug, PartialEq, Eq)] pub struct GotoLabel { pub(crate) function: Ref<Function>, @@ -57,11 +33,6 @@ pub struct LiftedBinaryOpCarry { pub right: Box<HighLevelILLiftedInstruction>, pub carry: Box<HighLevelILLiftedInstruction>, } -impl BinaryOpCarry { - pub(crate) fn new(left: usize, right: usize, carry: usize) -> Self { - Self { left, right, carry } - } -} // ADD, SUB, AND, OR, XOR, LSL, LSR, ASR, ROL, ROR, MUL, MULU_DP, MULS_DP, DIVU, DIVU_DP, DIVS, DIVS_DP, MODU, MODU_DP, MODS, MODS_DP, CMP_E, CMP_NE, CMP_SLT, CMP_ULT, CMP_SLE, CMP_ULE, CMP_SGE, CMP_UGE, CMP_SGT, CMP_UGT, TEST_BIT, ADD_OVERFLOW, FADD, FSUB, FMUL, FDIV, FCMP_E, FCMP_NE, FCMP_LT, FCMP_LE, FCMP_GE, FCMP_GT, FCMP_O, FCMP_UO #[derive(Copy, Clone)] @@ -74,11 +45,6 @@ pub struct LiftedBinaryOp { pub left: Box<HighLevelILLiftedInstruction>, pub right: Box<HighLevelILLiftedInstruction>, } -impl BinaryOp { - pub(crate) fn new(left: usize, right: usize) -> Self { - Self { left, right } - } -} // ARRAY_INDEX #[derive(Copy, Clone)] @@ -91,11 +57,6 @@ pub struct LiftedArrayIndex { pub src: Box<HighLevelILLiftedInstruction>, pub index: Box<HighLevelILLiftedInstruction>, } -impl ArrayIndex { - pub(crate) fn new(src: usize, index: usize) -> Self { - Self { src, index } - } -} // ARRAY_INDEX_SSA #[derive(Copy, Clone)] @@ -110,15 +71,6 @@ pub struct LiftedArrayIndexSsa { pub src_memory: u64, pub index: Box<HighLevelILLiftedInstruction>, } -impl ArrayIndexSsa { - pub(crate) fn new(src: usize, src_memory: u64, index: usize) -> Self { - Self { - src, - src_memory, - index, - } - } -} // ASSIGN #[derive(Copy, Clone)] @@ -131,11 +83,6 @@ pub struct LiftedAssign { pub dest: Box<HighLevelILLiftedInstruction>, pub src: Box<HighLevelILLiftedInstruction>, } -impl Assign { - pub(crate) fn new(dest: usize, src: usize) -> Self { - Self { dest, src } - } -} // ASSIGN_MEM_SSA #[derive(Copy, Clone)] @@ -152,16 +99,6 @@ pub struct LiftedAssignMemSsa { pub src: Box<HighLevelILLiftedInstruction>, pub src_memory: u64, } -impl AssignMemSsa { - pub(crate) fn new(dest: usize, dest_memory: u64, src: usize, src_memory: u64) -> Self { - Self { - dest, - dest_memory, - src, - src_memory, - } - } -} // ASSIGN_UNPACK #[derive(Copy, Clone)] @@ -175,15 +112,6 @@ pub struct LiftedAssignUnpack { pub dest: Vec<HighLevelILLiftedInstruction>, pub src: Box<HighLevelILLiftedInstruction>, } -impl AssignUnpack { - pub(crate) fn new(num_dests: usize, first_dest: usize, src: usize) -> Self { - Self { - num_dests, - first_dest, - src, - } - } -} // ASSIGN_UNPACK_MEM_SSA #[derive(Copy, Clone)] @@ -201,23 +129,6 @@ pub struct LiftedAssignUnpackMemSsa { pub src: Box<HighLevelILLiftedInstruction>, pub src_memory: u64, } -impl AssignUnpackMemSsa { - pub(crate) fn new( - num_dests: usize, - first_dest: usize, - dest_memory: u64, - src: usize, - src_memory: u64, - ) -> Self { - Self { - num_dests, - first_dest, - dest_memory, - src, - src_memory, - } - } -} // BLOCK #[derive(Copy, Clone)] @@ -229,14 +140,6 @@ pub struct Block { pub struct LiftedBlock { pub body: Vec<HighLevelILLiftedInstruction>, } -impl Block { - pub(crate) fn new(num_params: usize, first_param: usize) -> Self { - Self { - num_params, - first_param, - } - } -} // CALL, TAILCALL #[derive(Copy, Clone)] @@ -250,15 +153,6 @@ pub struct LiftedCall { pub dest: Box<HighLevelILLiftedInstruction>, pub params: Vec<HighLevelILLiftedInstruction>, } -impl Call { - pub(crate) fn new(dest: usize, num_params: usize, first_param: usize) -> Self { - Self { - dest, - num_params, - first_param, - } - } -} // CALL_SSA #[derive(Copy, Clone)] @@ -276,23 +170,6 @@ pub struct LiftedCallSsa { pub dest_memory: u64, pub src_memory: u64, } -impl CallSsa { - pub(crate) fn new( - dest: usize, - num_params: usize, - first_param: usize, - dest_memory: u64, - src_memory: u64, - ) -> Self { - Self { - dest, - num_params, - first_param, - dest_memory, - src_memory, - } - } -} // CASE #[derive(Copy, Clone)] @@ -306,26 +183,12 @@ pub struct LiftedCase { pub values: Vec<HighLevelILLiftedInstruction>, pub body: Box<HighLevelILLiftedInstruction>, } -impl Case { - pub(crate) fn new(num_values: usize, first_value: usize, body: usize) -> Self { - Self { - num_values, - first_value, - body, - } - } -} // CONST, CONST_PTR, IMPORT #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)] pub struct Const { pub constant: u64, } -impl Const { - pub(crate) fn new(constant: u64) -> Self { - Self { constant } - } -} // CONST_DATA #[derive(Copy, Clone)] @@ -338,15 +201,6 @@ pub struct ConstData { pub struct LiftedConstantData { pub constant_data: ConstantData, } -impl ConstData { - pub(crate) fn new(constant_data_kind: u32, constant_data_value: i64, size: usize) -> Self { - Self { - constant_data_kind, - constant_data_value, - size, - } - } -} // DEREF, ADDRESS_OF, NEG, NOT, SX, ZX, LOW_PART, BOOL_TO_INT, UNIMPL_MEM, FSQRT, FNEG, FABS, FLOAT_TO_INT, INT_TO_FLOAT, FLOAT_CONV, ROUND_TO_INT, FLOOR, CEIL, FTRUNC #[derive(Copy, Clone)] @@ -357,11 +211,6 @@ pub struct UnaryOp { pub struct LiftedUnaryOp { pub src: Box<HighLevelILLiftedInstruction>, } -impl UnaryOp { - pub(crate) fn new(src: usize) -> Self { - Self { src } - } -} // DEREF_FIELD_SSA #[derive(Copy, Clone)] @@ -378,16 +227,6 @@ pub struct LiftedDerefFieldSsa { pub offset: u64, pub member_index: Option<usize>, } -impl DerefFieldSsa { - pub(crate) fn new(src: usize, src_memory: u64, offset: u64, member_index: u64) -> Self { - Self { - src, - src_memory, - offset, - member_index: get_member_index(member_index), - } - } -} // DEREF_SSA #[derive(Copy, Clone)] @@ -400,11 +239,6 @@ pub struct LiftedDerefSsa { pub src: Box<HighLevelILLiftedInstruction>, pub src_memory: u64, } -impl DerefSsa { - pub(crate) fn new(src: usize, src_memory: u64) -> Self { - Self { src, src_memory } - } -} // EXTERN_PTR #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)] @@ -412,24 +246,12 @@ pub struct ExternPtr { pub constant: u64, pub offset: u64, } -impl ExternPtr { - pub(crate) fn new(constant: u64, offset: u64) -> Self { - Self { constant, offset } - } -} // FLOAT_CONST #[derive(Copy, Clone, Debug, PartialEq)] pub struct FloatConst { pub constant: f64, } -impl FloatConst { - pub(crate) fn new(constant: u64, size: usize) -> Self { - Self { - constant: get_float(constant, size), - } - } -} // FOR #[derive(Copy, Clone)] @@ -446,16 +268,6 @@ pub struct LiftedForLoop { pub update: Box<HighLevelILLiftedInstruction>, pub body: Box<HighLevelILLiftedInstruction>, } -impl ForLoop { - pub(crate) fn new(init: usize, condition: usize, update: usize, body: usize) -> Self { - Self { - init, - condition, - update, - body, - } - } -} // FOR_SSA #[derive(Copy, Clone)] @@ -474,23 +286,6 @@ pub struct LiftedForLoopSsa { pub update: Box<HighLevelILLiftedInstruction>, pub body: Box<HighLevelILLiftedInstruction>, } -impl ForLoopSsa { - pub(crate) fn new( - init: usize, - condition_phi: usize, - condition: usize, - update: usize, - body: usize, - ) -> Self { - Self { - init, - condition_phi, - condition, - update, - body, - } - } -} // GOTO, LABEL #[derive(Copy, Clone)] @@ -501,11 +296,7 @@ pub struct Label { pub struct LiftedLabel { pub target: GotoLabel, } -impl Label { - pub(crate) fn new(target: u64) -> Self { - Self { target } - } -} + // IF #[derive(Copy, Clone)] pub struct If { @@ -519,15 +310,6 @@ pub struct LiftedIf { pub cond_true: Box<HighLevelILLiftedInstruction>, pub cond_false: Box<HighLevelILLiftedInstruction>, } -impl If { - pub(crate) fn new(condition: usize, cond_true: usize, cond_false: usize) -> Self { - Self { - condition, - cond_true, - cond_false, - } - } -} // INTRINSIC #[derive(Copy, Clone)] @@ -541,15 +323,6 @@ pub struct LiftedIntrinsic { pub intrinsic: ILIntrinsic, pub params: Vec<HighLevelILLiftedInstruction>, } -impl Intrinsic { - pub(crate) fn new(intrinsic: u32, num_params: usize, first_param: usize) -> Self { - Self { - intrinsic, - num_params, - first_param, - } - } -} // INTRINSIC_SSA #[derive(Copy, Clone)] @@ -567,23 +340,6 @@ pub struct LiftedIntrinsicSsa { pub dest_memory: u64, pub src_memory: u64, } -impl IntrinsicSsa { - pub(crate) fn new( - intrinsic: u32, - num_params: usize, - first_param: usize, - dest_memory: u64, - src_memory: u64, - ) -> Self { - Self { - intrinsic, - num_params, - first_param, - dest_memory, - src_memory, - } - } -} // JUMP #[derive(Copy, Clone)] @@ -594,11 +350,6 @@ pub struct Jump { pub struct LiftedJump { pub dest: Box<HighLevelILLiftedInstruction>, } -impl Jump { - pub(crate) fn new(dest: usize) -> Self { - Self { dest } - } -} // MEM_PHI #[derive(Copy, Clone)] @@ -612,15 +363,6 @@ pub struct LiftedMemPhi { pub dest: u64, pub src: Vec<u64>, } -impl MemPhi { - pub(crate) fn new(dest: u64, num_srcs: usize, first_src: usize) -> Self { - Self { - dest, - num_srcs, - first_src, - } - } -} // RET #[derive(Copy, Clone)] @@ -632,14 +374,6 @@ pub struct Ret { pub struct LiftedRet { pub src: Vec<HighLevelILLiftedInstruction>, } -impl Ret { - pub(crate) fn new(num_srcs: usize, first_src: usize) -> Self { - Self { - first_src, - num_srcs, - } - } -} // SPLIT #[derive(Copy, Clone)] @@ -652,11 +386,6 @@ pub struct LiftedSplit { pub high: Box<HighLevelILLiftedInstruction>, pub low: Box<HighLevelILLiftedInstruction>, } -impl Split { - pub(crate) fn new(high: usize, low: usize) -> Self { - Self { high, low } - } -} // STRUCT_FIELD, DEREF_FIELD #[derive(Copy, Clone)] @@ -671,15 +400,6 @@ pub struct LiftedStructField { pub offset: u64, pub member_index: Option<usize>, } -impl StructField { - pub(crate) fn new(src: usize, offset: u64, member_index: u64) -> Self { - Self { - src, - offset, - member_index: get_member_index(member_index), - } - } -} // SWITCH #[derive(Copy, Clone)] @@ -695,21 +415,6 @@ pub struct LiftedSwitch { pub default: Box<HighLevelILLiftedInstruction>, pub cases: Vec<HighLevelILLiftedInstruction>, } -impl Switch { - pub(crate) fn new( - condition: usize, - default: usize, - num_cases: usize, - first_case: usize, - ) -> Self { - Self { - condition, - default, - num_cases, - first_case, - } - } -} // SYSCALL #[derive(Copy, Clone)] @@ -721,14 +426,6 @@ pub struct Syscall { pub struct LiftedSyscall { pub params: Vec<HighLevelILLiftedInstruction>, } -impl Syscall { - pub(crate) fn new(num_params: usize, first_param: usize) -> Self { - Self { - num_params, - first_param, - } - } -} // SYSCALL_SSA #[derive(Copy, Clone)] @@ -744,43 +441,18 @@ pub struct LiftedSyscallSsa { pub dest_memory: u64, pub src_memory: u64, } -impl SyscallSsa { - pub(crate) fn new( - num_params: usize, - first_param: usize, - dest_memory: u64, - src_memory: u64, - ) -> Self { - Self { - num_params, - first_param, - dest_memory, - src_memory, - } - } -} // TRAP #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)] pub struct Trap { pub vector: u64, } -impl Trap { - pub(crate) fn new(vector: u64) -> Self { - Self { vector } - } -} // VAR_DECLARE, VAR #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)] pub struct Var { pub var: Variable, } -impl Var { - pub(crate) fn new(var: u64) -> Self { - Self { var: get_var(var) } - } -} // VAR_INIT #[derive(Copy, Clone)] @@ -793,14 +465,6 @@ pub struct LiftedVarInit { pub dest: Variable, pub src: Box<HighLevelILLiftedInstruction>, } -impl VarInit { - pub(crate) fn new(dest: u64, src: usize) -> Self { - Self { - dest: get_var(dest), - src, - } - } -} // VAR_INIT_SSA #[derive(Copy, Clone)] @@ -813,14 +477,6 @@ pub struct LiftedVarInitSsa { pub dest: SSAVariable, pub src: Box<HighLevelILLiftedInstruction>, } -impl VarInitSsa { - pub(crate) fn new(dest: (u64, usize), src: usize) -> Self { - Self { - dest: get_var_ssa(dest), - src, - } - } -} // VAR_PHI #[derive(Copy, Clone)] @@ -834,28 +490,12 @@ pub struct LiftedVarPhi { pub dest: SSAVariable, pub src: Vec<SSAVariable>, } -impl VarPhi { - pub(crate) fn new(dest: (u64, usize), num_srcs: usize, first_src: usize) -> Self { - Self { - dest: get_var_ssa(dest), - num_srcs, - first_src, - } - } -} // VAR_SSA #[derive(Copy, Clone, Debug, Hash, PartialEq, Eq)] pub struct VarSsa { pub var: SSAVariable, } -impl VarSsa { - pub(crate) fn new(var: (u64, usize)) -> Self { - Self { - var: get_var_ssa(var), - } - } -} // WHILE, DO_WHILE #[derive(Copy, Clone)] @@ -868,11 +508,6 @@ pub struct LiftedWhile { pub condition: Box<HighLevelILLiftedInstruction>, pub body: Box<HighLevelILLiftedInstruction>, } -impl While { - pub(crate) fn new(condition: usize, body: usize) -> Self { - Self { condition, body } - } -} // WHILE_SSA, DO_WHILE_SSA #[derive(Copy, Clone)] @@ -887,12 +522,3 @@ pub struct LiftedWhileSsa { pub condition: Box<HighLevelILLiftedInstruction>, pub body: Box<HighLevelILLiftedInstruction>, } -impl WhileSsa { - pub(crate) fn new(condition_phi: usize, condition: usize, body: usize) -> Self { - Self { - condition_phi, - condition, - body, - } - } -} |
