! \ingroup lowlevelil */
| 687 | \ingroup lowlevelil |
| 688 | */ |
| 689 | struct LowLevelILInstructionBase : public BNLowLevelILInstruction |
| 690 | { |
| 691 | #ifdef BINARYNINJACORE_LIBRARY |
| 692 | LowLevelILFunction* function; |
| 693 | #else |
| 694 | Ref<LowLevelILFunction> function; |
| 695 | #endif |
| 696 | size_t exprIndex, instructionIndex; |
| 697 | |
| 698 | static _STD_UNORDERED_MAP<LowLevelILOperandUsage, LowLevelILOperandType> operandTypeForUsage; |
| 699 | static _STD_UNORDERED_MAP<BNLowLevelILOperation, _STD_VECTOR<LowLevelILOperandUsage>> operationOperandUsage; |
| 700 | static _STD_UNORDERED_MAP<BNLowLevelILOperation, _STD_UNORDERED_MAP<LowLevelILOperandUsage, size_t>> |
| 701 | operationOperandIndex; |
| 702 | |
| 703 | LowLevelILOperandList GetOperands() const; |
| 704 | |
| 705 | uint64_t GetRawOperandAsInteger(size_t operand) const; |
| 706 | uint32_t GetRawOperandAsRegister(size_t operand) const; |
| 707 | size_t GetRawOperandAsIndex(size_t operand) const; |
| 708 | BNLowLevelILFlagCondition GetRawOperandAsFlagCondition(size_t operand) const; |
| 709 | LowLevelILInstruction GetRawOperandAsExpr(size_t operand) const; |
| 710 | SSARegister GetRawOperandAsSSARegister(size_t operand) const; |
| 711 | SSARegisterStack GetRawOperandAsSSARegisterStack(size_t operand) const; |
| 712 | SSARegisterStack GetRawOperandAsPartialSSARegisterStackSource(size_t operand) const; |
| 713 | SSAFlag GetRawOperandAsSSAFlag(size_t operand) const; |
| 714 | LowLevelILIndexList GetRawOperandAsIndexList(size_t operand) const; |
| 715 | LowLevelILIndexMap GetRawOperandAsIndexMap(size_t operand) const; |
| 716 | LowLevelILInstructionList GetRawOperandAsExprList(size_t operand) const; |
| 717 | LowLevelILRegisterOrFlagList GetRawOperandAsRegisterOrFlagList(size_t operand) const; |
| 718 | LowLevelILSSARegisterList GetRawOperandAsSSARegisterList(size_t operand) const; |
| 719 | LowLevelILSSARegisterStackList GetRawOperandAsSSARegisterStackList(size_t operand) const; |
| 720 | LowLevelILSSAFlagList GetRawOperandAsSSAFlagList(size_t operand) const; |
| 721 | LowLevelILSSARegisterOrFlagList GetRawOperandAsSSARegisterOrFlagList(size_t operand) const; |
| 722 | _STD_MAP<uint32_t, int32_t> GetRawOperandAsRegisterStackAdjustments(size_t operand) const; |
| 723 | PossibleValueSet GetRawOperandAsPossibleValueSet(size_t operand) const; |
| 724 | |
| 725 | void UpdateRawOperand(size_t operandIndex, ExprId value); |
| 726 | void UpdateRawOperandAsSSARegisterList(size_t operandIndex, const _STD_VECTOR<SSARegister>& regs); |
| 727 | void UpdateRawOperandAsSSARegisterOrFlagList( |
| 728 | size_t operandIndex, const _STD_VECTOR<SSARegisterOrFlag>& outputs); |
| 729 | |
| 730 | RegisterValue GetValue() const; |
| 731 | PossibleValueSet GetPossibleValues( |
| 732 | const _STD_SET<BNDataFlowQueryOption>& options = _STD_SET<BNDataFlowQueryOption>()) const; |
| 733 | |
| 734 | RegisterValue GetRegisterValue(uint32_t reg); |
| 735 | RegisterValue GetRegisterValueAfter(uint32_t reg); |
| 736 | PossibleValueSet GetPossibleRegisterValues(uint32_t reg); |
| 737 | PossibleValueSet GetPossibleRegisterValuesAfter(uint32_t reg); |
| 738 | RegisterValue GetFlagValue(uint32_t flag); |
| 739 | RegisterValue GetFlagValueAfter(uint32_t flag); |
| 740 | PossibleValueSet GetPossibleFlagValues(uint32_t flag); |
| 741 | PossibleValueSet GetPossibleFlagValuesAfter(uint32_t flag); |
| 742 | RegisterValue GetStackContents(int32_t offset, size_t len); |
| 743 | RegisterValue GetStackContentsAfter(int32_t offset, size_t len); |
| 744 | PossibleValueSet GetPossibleStackContents(int32_t offset, size_t len); |
| 745 | PossibleValueSet GetPossibleStackContentsAfter(int32_t offset, size_t len); |
| 746 |
nothing calls this directly
no test coverage detected