MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / from_raw

Method from_raw

rust/src/low_level_il/instruction.rs:260–314  ·  view source on GitHub ↗
(
        function: &'func LowLevelILFunction<A, M, F>,
        expr_index: LowLevelExpressionIndex,
        op: BNLowLevelILInstruction,
    )

Source from the content-addressed store, hash-verified

258 F: FunctionForm,
259{
260 pub(crate) unsafe fn from_raw(
261 function: &'func LowLevelILFunction<A, M, F>,
262 expr_index: LowLevelExpressionIndex,
263 op: BNLowLevelILInstruction,
264 ) -> Self {
265 use binaryninjacore_sys::BNLowLevelILOperation::*;
266
267 match op.operation {
268 LLIL_NOP => LowLevelILInstructionKind::Nop(Operation::new(function, op)),
269 LLIL_SET_REG | LLIL_SET_REG_SSA => {
270 LowLevelILInstructionKind::SetReg(Operation::new(function, op))
271 }
272 LLIL_SET_REG_SPLIT | LLIL_SET_REG_SPLIT_SSA => {
273 LowLevelILInstructionKind::SetRegSplit(Operation::new(function, op))
274 }
275 LLIL_SET_FLAG | LLIL_SET_FLAG_SSA => {
276 LowLevelILInstructionKind::SetFlag(Operation::new(function, op))
277 }
278 LLIL_STORE | LLIL_STORE_SSA => {
279 LowLevelILInstructionKind::Store(Operation::new(function, op))
280 }
281 LLIL_PUSH => LowLevelILInstructionKind::Push(Operation::new(function, op)),
282
283 LLIL_REG_STACK_PUSH => {
284 LowLevelILInstructionKind::RegStackPush(Operation::new(function, op))
285 }
286
287 LLIL_JUMP => LowLevelILInstructionKind::Jump(Operation::new(function, op)),
288 LLIL_JUMP_TO => LowLevelILInstructionKind::JumpTo(Operation::new(function, op)),
289
290 LLIL_CALL | LLIL_CALL_STACK_ADJUST | LLIL_CALL_SSA => {
291 LowLevelILInstructionKind::Call(Operation::new(function, op))
292 }
293 LLIL_TAILCALL | LLIL_TAILCALL_SSA => {
294 LowLevelILInstructionKind::TailCall(Operation::new(function, op))
295 }
296
297 LLIL_RET => LowLevelILInstructionKind::Ret(Operation::new(function, op)),
298 LLIL_NORET => LowLevelILInstructionKind::NoRet(Operation::new(function, op)),
299
300 LLIL_IF => LowLevelILInstructionKind::If(Operation::new(function, op)),
301 LLIL_GOTO => LowLevelILInstructionKind::Goto(Operation::new(function, op)),
302
303 LLIL_SYSCALL | LLIL_SYSCALL_SSA => {
304 LowLevelILInstructionKind::Syscall(Operation::new(function, op))
305 }
306 LLIL_INTRINSIC | LLIL_INTRINSIC_SSA => {
307 LowLevelILInstructionKind::Intrinsic(Operation::new(function, op))
308 }
309 LLIL_BP => LowLevelILInstructionKind::Bp(Operation::new(function, op)),
310 LLIL_TRAP => LowLevelILInstructionKind::Trap(Operation::new(function, op)),
311 LLIL_UNDEF => LowLevelILInstructionKind::Undef(Operation::new(function, op)),
312 _ => LowLevelILInstructionKind::Value(LowLevelILExpression::new(function, expr_index)),
313 }
314 }
315
316 fn visit_sub_expressions<T>(&self, mut visitor: T) -> VisitorAction
317 where

Callers

nothing calls this directly

Calls 15

SetRegSplitClass · 0.85
SetFlagClass · 0.85
RegStackPushClass · 0.85
SetRegClass · 0.70
StoreClass · 0.70
JumpClass · 0.70
JumpToClass · 0.70
CallClass · 0.70
RetClass · 0.70
IfClass · 0.70
GotoClass · 0.70
SyscallClass · 0.70

Tested by

no test coverage detected