summaryrefslogtreecommitdiff
path: root/lang/c/pseudoobjc.h
diff options
context:
space:
mode:
Diffstat (limited to 'lang/c/pseudoobjc.h')
-rw-r--r--lang/c/pseudoobjc.h44
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;
+};