diff options
Diffstat (limited to 'lang/c/pseudoobjc.h')
| -rw-r--r-- | lang/c/pseudoobjc.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lang/c/pseudoobjc.h b/lang/c/pseudoobjc.h new file mode 100644 index 00000000..4b87c7d7 --- /dev/null +++ b/lang/c/pseudoobjc.h @@ -0,0 +1,44 @@ +#pragma once + +#include "pseudoc.h" + +#include "binaryninjaapi.h" + +class PseudoObjCFunction : public PseudoCFunction +{ +public: + PseudoObjCFunction(BinaryNinja::LanguageRepresentationFunctionType* type, BinaryNinja::Architecture* arch, + BinaryNinja::Function* owner, BinaryNinja::HighLevelILFunction* highLevelILFunction); + +protected: + void GetExpr_CALL_OR_TAILCALL(const BinaryNinja::HighLevelILInstruction& instr, + BinaryNinja::HighLevelILTokenEmitter& tokens, BinaryNinja::DisassemblySettings* settings, + BNOperatorPrecedence precedence, bool statement) override; + void GetExpr_CONST_PTR(const BinaryNinja::HighLevelILInstruction& instr, + BinaryNinja::HighLevelILTokenEmitter& tokens, BinaryNinja::DisassemblySettings* settings, + BNOperatorPrecedence precedence, bool statement) override; + void GetExpr_IMPORT(const BinaryNinja::HighLevelILInstruction& instr, + BinaryNinja::HighLevelILTokenEmitter& tokens, BinaryNinja::DisassemblySettings* settings, + BNOperatorPrecedence precedence, bool statement) override; + +private: + bool GetExpr_ObjCMsgSend(const BinaryNinja::HighLevelILInstruction& expr, + BinaryNinja::HighLevelILTokenEmitter& tokens, BinaryNinja::DisassemblySettings* settings, + const std::vector<BinaryNinja::HighLevelILInstruction>& parameterExprs); + bool GetExpr_GenericObjCRuntimeCall(uint64_t address, const BinaryNinja::HighLevelILInstruction& expr, + BinaryNinja::HighLevelILTokenEmitter& tokens, BinaryNinja::DisassemblySettings* settings, + const std::vector<BinaryNinja::HighLevelILInstruction>& parameterExprs, const std::vector<std::string_view>& selectorTokens); + bool GetExpr_OBJC_CLASS(const BinaryNinja::Symbol& symbol, uint64_t constant, + const BinaryNinja::HighLevelILInstruction& expr, BinaryNinja::HighLevelILTokenEmitter& tokens, + BinaryNinja::DisassemblySettings* settings, BNOperatorPrecedence precedence, bool statement); + bool GetExpr_NSConstantString(BinaryNinja::Ref<BinaryNinja::Type> type, uint64_t constant, + const BinaryNinja::HighLevelILInstruction& expr, BinaryNinja::HighLevelILTokenEmitter& tokens, + BinaryNinja::DisassemblySettings* settings, BNOperatorPrecedence precedence, bool statement); +}; + +class PseudoObjCFunctionType : public PseudoCFunctionType { +public: + PseudoObjCFunctionType(); + BinaryNinja::Ref<BinaryNinja::LanguageRepresentationFunction> Create(BinaryNinja::Architecture* arch, + BinaryNinja::Function* owner, BinaryNinja::HighLevelILFunction* highLevelILFunction) override; +}; |
