TODO: Document what "unchecked" means and how to consume this safely.
(
function: &'func LowLevelILFunction<A, M, F>,
op: BNLowLevelILInstruction,
)
| 333 | { |
| 334 | // TODO: Document what "unchecked" means and how to consume this safely. |
| 335 | pub(crate) unsafe fn from_raw( |
| 336 | function: &'func LowLevelILFunction<A, M, F>, |
| 337 | op: BNLowLevelILInstruction, |
| 338 | ) -> Self { |
| 339 | use binaryninjacore_sys::BNLowLevelILOperation::*; |
| 340 | |
| 341 | match op.operation { |
| 342 | LLIL_LOAD | LLIL_LOAD_SSA => { |
| 343 | LowLevelILExpressionKind::Load(Operation::new(function, op)) |
| 344 | } |
| 345 | LLIL_POP => LowLevelILExpressionKind::Pop(Operation::new(function, op)), |
| 346 | LLIL_REG | LLIL_REG_SSA | LLIL_REG_SSA_PARTIAL => { |
| 347 | LowLevelILExpressionKind::Reg(Operation::new(function, op)) |
| 348 | } |
| 349 | LLIL_REG_SPLIT | LLIL_REG_SPLIT_SSA => { |
| 350 | LowLevelILExpressionKind::RegSplit(Operation::new(function, op)) |
| 351 | } |
| 352 | LLIL_CONST => LowLevelILExpressionKind::Const(Operation::new(function, op)), |
| 353 | LLIL_CONST_PTR => LowLevelILExpressionKind::ConstPtr(Operation::new(function, op)), |
| 354 | LLIL_FLAG | LLIL_FLAG_SSA => { |
| 355 | LowLevelILExpressionKind::Flag(Operation::new(function, op)) |
| 356 | } |
| 357 | LLIL_FLAG_BIT | LLIL_FLAG_BIT_SSA => { |
| 358 | LowLevelILExpressionKind::FlagBit(Operation::new(function, op)) |
| 359 | } |
| 360 | LLIL_EXTERN_PTR => LowLevelILExpressionKind::ExternPtr(Operation::new(function, op)), |
| 361 | |
| 362 | LLIL_REG_STACK_POP => { |
| 363 | LowLevelILExpressionKind::RegStackPop(Operation::new(function, op)) |
| 364 | } |
| 365 | |
| 366 | LLIL_ADD => LowLevelILExpressionKind::Add(Operation::new(function, op)), |
| 367 | LLIL_ADC => LowLevelILExpressionKind::Adc(Operation::new(function, op)), |
| 368 | LLIL_SUB => LowLevelILExpressionKind::Sub(Operation::new(function, op)), |
| 369 | LLIL_SBB => LowLevelILExpressionKind::Sbb(Operation::new(function, op)), |
| 370 | LLIL_AND => LowLevelILExpressionKind::And(Operation::new(function, op)), |
| 371 | LLIL_OR => LowLevelILExpressionKind::Or(Operation::new(function, op)), |
| 372 | LLIL_XOR => LowLevelILExpressionKind::Xor(Operation::new(function, op)), |
| 373 | LLIL_LSL => LowLevelILExpressionKind::Lsl(Operation::new(function, op)), |
| 374 | LLIL_LSR => LowLevelILExpressionKind::Lsr(Operation::new(function, op)), |
| 375 | LLIL_ASR => LowLevelILExpressionKind::Asr(Operation::new(function, op)), |
| 376 | LLIL_ROL => LowLevelILExpressionKind::Rol(Operation::new(function, op)), |
| 377 | LLIL_RLC => LowLevelILExpressionKind::Rlc(Operation::new(function, op)), |
| 378 | LLIL_ROR => LowLevelILExpressionKind::Ror(Operation::new(function, op)), |
| 379 | LLIL_RRC => LowLevelILExpressionKind::Rrc(Operation::new(function, op)), |
| 380 | LLIL_MUL => LowLevelILExpressionKind::Mul(Operation::new(function, op)), |
| 381 | |
| 382 | LLIL_MULU_DP => LowLevelILExpressionKind::MuluDp(Operation::new(function, op)), |
| 383 | LLIL_MULS_DP => LowLevelILExpressionKind::MulsDp(Operation::new(function, op)), |
| 384 | |
| 385 | LLIL_DIVU => LowLevelILExpressionKind::Divu(Operation::new(function, op)), |
| 386 | LLIL_DIVS => LowLevelILExpressionKind::Divs(Operation::new(function, op)), |
| 387 | |
| 388 | LLIL_DIVU_DP => LowLevelILExpressionKind::DivuDp(Operation::new(function, op)), |
| 389 | LLIL_DIVS_DP => LowLevelILExpressionKind::DivsDp(Operation::new(function, op)), |
| 390 | |
| 391 | LLIL_MODU => LowLevelILExpressionKind::Modu(Operation::new(function, op)), |
| 392 | LLIL_MODS => LowLevelILExpressionKind::Mods(Operation::new(function, op)), |