summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api.pro1
-rw-r--r--binaryninjaapi.h12
-rw-r--r--functionrecognizer.cpp33
3 files changed, 46 insertions, 0 deletions
diff --git a/api.pro b/api.pro
index 4ae86e03..3de6db3f 100644
--- a/api.pro
+++ b/api.pro
@@ -29,6 +29,7 @@ SOURCES += \
tempfile.cpp \
lowlevelil.cpp \
type.cpp \
+ functionrecognizer.cpp \
../core/json/jsoncpp.cpp
HEADERS += binaryninjaapi.h
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index e094aaa7..051e4fa0 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1260,4 +1260,16 @@ namespace BinaryNinja
void Finalize();
};
+
+ class FunctionRecognizer
+ {
+ static bool RecognizeLowLevelILCallback(void* ctxt, BNBinaryView* data, BNFunction* func, BNLowLevelILFunction* il);
+
+ public:
+ FunctionRecognizer();
+
+ static void RegisterGlobalRecognizer(FunctionRecognizer* recog);
+
+ virtual bool RecognizeLowLevelIL(BinaryView* data, Function* func, LowLevelILFunction* il);
+ };
}
diff --git a/functionrecognizer.cpp b/functionrecognizer.cpp
new file mode 100644
index 00000000..6aa89098
--- /dev/null
+++ b/functionrecognizer.cpp
@@ -0,0 +1,33 @@
+#include "binaryninjaapi.h"
+
+using namespace BinaryNinja;
+
+
+FunctionRecognizer::FunctionRecognizer()
+{
+}
+
+
+bool FunctionRecognizer::RecognizeLowLevelILCallback(void* ctxt, BNBinaryView* data, BNFunction* func, BNLowLevelILFunction* il)
+{
+ FunctionRecognizer* recog = (FunctionRecognizer*)ctxt;
+ Ref<BinaryView> dataObj = new BinaryView(BNNewViewReference(data));
+ Ref<Function> funcObj = new Function(BNNewFunctionReference(func));
+ Ref<LowLevelILFunction> ilObj = new LowLevelILFunction(BNNewLowLevelILFunctionReference(il));
+ return recog->RecognizeLowLevelIL(dataObj, funcObj, ilObj);
+}
+
+
+void FunctionRecognizer::RegisterGlobalRecognizer(FunctionRecognizer* recog)
+{
+ BNFunctionRecognizer reg;
+ reg.context = recog;
+ reg.recognizeLowLevelIL = RecognizeLowLevelILCallback;
+ BNRegisterGlobalFunctionRecognizer(&reg);
+}
+
+
+bool FunctionRecognizer::RecognizeLowLevelIL(BinaryView*, Function*, LowLevelILFunction*)
+{
+ return false;
+}