summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
authorMichael Krasnitski <michael.krasnitski@gmail.com>2024-02-12 01:03:42 -0500
committerKyle Martin <krm504@nyu.edu>2024-04-09 12:19:40 -0400
commite35a98e0bf47e86f127051ee048ff724d6f10a8e (patch)
tree8797d8aec62645bbb82a509d2ded9b293c402b9c /rust/src
parent163b5e247095c643146d844f33877e16e84650b3 (diff)
Add name method to MLIL and HLIL lifted instructions
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/hlil/lift.rs128
-rw-r--r--rust/src/mlil/lift.rs136
2 files changed, 264 insertions, 0 deletions
diff --git a/rust/src/hlil/lift.rs b/rust/src/hlil/lift.rs
index f8db34c5..20f8800b 100644
--- a/rust/src/hlil/lift.rs
+++ b/rust/src/hlil/lift.rs
@@ -153,6 +153,134 @@ pub enum HighLevelILLiftedInstructionKind {
}
impl HighLevelILLiftedInstruction {
+ pub fn name(&self) -> &'static str {
+ use HighLevelILLiftedInstructionKind::*;
+ match self.kind {
+ Nop => "Nop",
+ Break => "Break",
+ Continue => "Continue",
+ Noret => "Noret",
+ Unreachable => "Unreachable",
+ Bp => "Bp",
+ Undef => "Undef",
+ Unimpl => "Unimpl",
+ Adc(_) => "Adc",
+ Sbb(_) => "Sbb",
+ Rlc(_) => "Rlc",
+ Rrc(_) => "Rrc",
+ Add(_) => "Add",
+ Sub(_) => "Sub",
+ And(_) => "And",
+ Or(_) => "Or",
+ Xor(_) => "Xor",
+ Lsl(_) => "Lsl",
+ Lsr(_) => "Lsr",
+ Asr(_) => "Asr",
+ Rol(_) => "Rol",
+ Ror(_) => "Ror",
+ Mul(_) => "Mul",
+ MuluDp(_) => "MuluDp",
+ MulsDp(_) => "MulsDp",
+ Divu(_) => "Divu",
+ DivuDp(_) => "DivuDp",
+ Divs(_) => "Divs",
+ DivsDp(_) => "DivsDp",
+ Modu(_) => "Modu",
+ ModuDp(_) => "ModuDp",
+ Mods(_) => "Mods",
+ ModsDp(_) => "ModsDp",
+ CmpE(_) => "CmpE",
+ CmpNe(_) => "CmpNe",
+ CmpSlt(_) => "CmpSlt",
+ CmpUlt(_) => "CmpUlt",
+ CmpSle(_) => "CmpSle",
+ CmpUle(_) => "CmpUle",
+ CmpSge(_) => "CmpSge",
+ CmpUge(_) => "CmpUge",
+ CmpSgt(_) => "CmpSgt",
+ CmpUgt(_) => "CmpUgt",
+ TestBit(_) => "TestBit",
+ AddOverflow(_) => "AddOverflow",
+ Fadd(_) => "Fadd",
+ Fsub(_) => "Fsub",
+ Fmul(_) => "Fmul",
+ Fdiv(_) => "Fdiv",
+ FcmpE(_) => "FcmpE",
+ FcmpNe(_) => "FcmpNe",
+ FcmpLt(_) => "FcmpLt",
+ FcmpLe(_) => "FcmpLe",
+ FcmpGe(_) => "FcmpGe",
+ FcmpGt(_) => "FcmpGt",
+ FcmpO(_) => "FcmpO",
+ FcmpUo(_) => "FcmpUo",
+ ArrayIndex(_) => "ArrayIndex",
+ ArrayIndexSsa(_) => "ArrayIndexSsa",
+ Assign(_) => "Assign",
+ AssignMemSsa(_) => "AssignMemSsa",
+ AssignUnpack(_) => "AssignUnpack",
+ AssignUnpackMemSsa(_) => "AssignUnpackMemSsa",
+ Block(_) => "Block",
+ Call(_) => "Call",
+ Tailcall(_) => "Tailcall",
+ CallSsa(_) => "CallSsa",
+ Case(_) => "Case",
+ Const(_) => "Const",
+ ConstPtr(_) => "ConstPtr",
+ Import(_) => "Import",
+ ConstData(_) => "ConstData",
+ Deref(_) => "Deref",
+ AddressOf(_) => "AddressOf",
+ Neg(_) => "Neg",
+ Not(_) => "Not",
+ Sx(_) => "Sx",
+ Zx(_) => "Zx",
+ LowPart(_) => "LowPart",
+ BoolToInt(_) => "BoolToInt",
+ UnimplMem(_) => "UnimplMem",
+ Fsqrt(_) => "Fsqrt",
+ Fneg(_) => "Fneg",
+ Fabs(_) => "Fabs",
+ FloatToInt(_) => "FloatToInt",
+ IntToFloat(_) => "IntToFloat",
+ FloatConv(_) => "FloatConv",
+ RoundToInt(_) => "RoundToInt",
+ Floor(_) => "Floor",
+ Ceil(_) => "Ceil",
+ Ftrunc(_) => "Ftrunc",
+ DerefFieldSsa(_) => "DerefFieldSsa",
+ DerefSsa(_) => "DerefSsa",
+ ExternPtr(_) => "ExternPtr",
+ FloatConst(_) => "FloatConst",
+ For(_) => "For",
+ ForSsa(_) => "ForSsa",
+ Goto(_) => "Goto",
+ Label(_) => "Label",
+ If(_) => "If",
+ Intrinsic(_) => "Intrinsic",
+ IntrinsicSsa(_) => "IntrinsicSsa",
+ Jump(_) => "Jump",
+ MemPhi(_) => "MemPhi",
+ Ret(_) => "Ret",
+ Split(_) => "Split",
+ StructField(_) => "StructField",
+ DerefField(_) => "DerefField",
+ Switch(_) => "Switch",
+ Syscall(_) => "Syscall",
+ SyscallSsa(_) => "SyscallSsa",
+ Trap(_) => "Trap",
+ VarDeclare(_) => "VarDeclare",
+ Var(_) => "Var",
+ VarInit(_) => "VarInit",
+ VarInitSsa(_) => "VarInitSsa",
+ VarPhi(_) => "VarPhi",
+ VarSsa(_) => "VarSsa",
+ While(_) => "While",
+ DoWhile(_) => "DoWhile",
+ WhileSsa(_) => "WhileSsa",
+ DoWhileSsa(_) => "DoWhileSsa",
+ }
+ }
+
pub fn operands(&self) -> Vec<(&'static str, HighLevelILLiftedOperand)> {
use HighLevelILLiftedInstructionKind::*;
use HighLevelILLiftedOperand as Operand;
diff --git a/rust/src/mlil/lift.rs b/rust/src/mlil/lift.rs
index ba434d15..db91a8d8 100644
--- a/rust/src/mlil/lift.rs
+++ b/rust/src/mlil/lift.rs
@@ -164,6 +164,142 @@ pub enum MediumLevelILLiftedInstructionKind {
}
impl MediumLevelILLiftedInstruction {
+ pub fn name(&self) -> &'static str {
+ use MediumLevelILLiftedInstructionKind::*;
+ match self.kind {
+ Nop => "Nop",
+ Noret => "Noret",
+ Bp => "Bp",
+ Undef => "Undef",
+ Unimpl => "Unimpl",
+ If(_) => "If",
+ FloatConst(_) => "FloatConst",
+ Const(_) => "Const",
+ ConstPtr(_) => "ConstPtr",
+ Import(_) => "Import",
+ ExternPtr(_) => "ExternPtr",
+ ConstData(_) => "ConstData",
+ Jump(_) => "Jump",
+ RetHint(_) => "RetHint",
+ StoreSsa(_) => "StoreSsa",
+ StoreStructSsa(_) => "StoreStructSsa",
+ StoreStruct(_) => "StoreStruct",
+ Store(_) => "Store",
+ JumpTo(_) => "JumpTo",
+ Goto(_) => "Goto",
+ FreeVarSlot(_) => "FreeVarSlot",
+ SetVarField(_) => "SetVarField",
+ SetVar(_) => "SetVar",
+ FreeVarSlotSsa(_) => "FreeVarSlotSsa",
+ SetVarSsaField(_) => "SetVarSsaField",
+ SetVarAliasedField(_) => "SetVarAliasedField",
+ SetVarAliased(_) => "SetVarAliased",
+ SetVarSsa(_) => "SetVarSsa",
+ VarPhi(_) => "VarPhi",
+ MemPhi(_) => "MemPhi",
+ VarSplit(_) => "VarSplit",
+ SetVarSplit(_) => "SetVarSplit",
+ VarSplitSsa(_) => "VarSplitSsa",
+ SetVarSplitSsa(_) => "SetVarSplitSsa",
+ Add(_) => "Add",
+ Sub(_) => "Sub",
+ And(_) => "And",
+ Or(_) => "Or",
+ Xor(_) => "Xor",
+ Lsl(_) => "Lsl",
+ Lsr(_) => "Lsr",
+ Asr(_) => "Asr",
+ Rol(_) => "Rol",
+ Ror(_) => "Ror",
+ Mul(_) => "Mul",
+ MuluDp(_) => "MuluDp",
+ MulsDp(_) => "MulsDp",
+ Divu(_) => "Divu",
+ DivuDp(_) => "DivuDp",
+ Divs(_) => "Divs",
+ DivsDp(_) => "DivsDp",
+ Modu(_) => "Modu",
+ ModuDp(_) => "ModuDp",
+ Mods(_) => "Mods",
+ ModsDp(_) => "ModsDp",
+ CmpE(_) => "CmpE",
+ CmpNe(_) => "CmpNe",
+ CmpSlt(_) => "CmpSlt",
+ CmpUlt(_) => "CmpUlt",
+ CmpSle(_) => "CmpSle",
+ CmpUle(_) => "CmpUle",
+ CmpSge(_) => "CmpSge",
+ CmpUge(_) => "CmpUge",
+ CmpSgt(_) => "CmpSgt",
+ CmpUgt(_) => "CmpUgt",
+ TestBit(_) => "TestBit",
+ AddOverflow(_) => "AddOverflow",
+ FcmpE(_) => "FcmpE",
+ FcmpNe(_) => "FcmpNe",
+ FcmpLt(_) => "FcmpLt",
+ FcmpLe(_) => "FcmpLe",
+ FcmpGe(_) => "FcmpGe",
+ FcmpGt(_) => "FcmpGt",
+ FcmpO(_) => "FcmpO",
+ FcmpUo(_) => "FcmpUo",
+ Fadd(_) => "Fadd",
+ Fsub(_) => "Fsub",
+ Fmul(_) => "Fmul",
+ Fdiv(_) => "Fdiv",
+ Adc(_) => "Adc",
+ Sbb(_) => "Sbb",
+ Rlc(_) => "Rlc",
+ Rrc(_) => "Rrc",
+ Call(_) => "Call",
+ Tailcall(_) => "Tailcall",
+ Syscall(_) => "Syscall",
+ Intrinsic(_) => "Intrinsic",
+ IntrinsicSsa(_) => "IntrinsicSsa",
+ CallSsa(_) => "CallSsa",
+ TailcallSsa(_) => "TailcallSsa",
+ CallUntypedSsa(_) => "CallUntypedSsa",
+ TailcallUntypedSsa(_) => "TailcallUntypedSsa",
+ SyscallSsa(_) => "SyscallSsa",
+ SyscallUntypedSsa(_) => "SyscallUntypedSsa",
+ CallUntyped(_) => "CallUntyped",
+ TailcallUntyped(_) => "TailcallUntyped",
+ SyscallUntyped(_) => "SyscallUntyped",
+ SeparateParamList(_) => "SeparateParamList",
+ SharedParamSlot(_) => "SharedParamSlot",
+ Neg(_) => "Neg",
+ Not(_) => "Not",
+ Sx(_) => "Sx",
+ Zx(_) => "Zx",
+ LowPart(_) => "LowPart",
+ BoolToInt(_) => "BoolToInt",
+ UnimplMem(_) => "UnimplMem",
+ Fsqrt(_) => "Fsqrt",
+ Fneg(_) => "Fneg",
+ Fabs(_) => "Fabs",
+ FloatToInt(_) => "FloatToInt",
+ IntToFloat(_) => "IntToFloat",
+ FloatConv(_) => "FloatConv",
+ RoundToInt(_) => "RoundToInt",
+ Floor(_) => "Floor",
+ Ceil(_) => "Ceil",
+ Ftrunc(_) => "Ftrunc",
+ Load(_) => "Load",
+ LoadStruct(_) => "LoadStruct",
+ LoadStructSsa(_) => "LoadStructSsa",
+ LoadSsa(_) => "LoadSsa",
+ Ret(_) => "Ret",
+ Var(_) => "Var",
+ AddressOf(_) => "AddressOf",
+ VarField(_) => "VarField",
+ AddressOfField(_) => "AddressOfField",
+ VarSsa(_) => "VarSsa",
+ VarAliased(_) => "VarAliased",
+ VarSsaField(_) => "VarSsaField",
+ VarAliasedField(_) => "VarAliasedField",
+ Trap(_) => "Trap",
+ }
+ }
+
pub fn operands(&self) -> Vec<(&'static str, MediumLevelILLiftedOperand)> {
use MediumLevelILLiftedInstructionKind::*;
use MediumLevelILLiftedOperand as Operand;