diff options
| -rw-r--r-- | api.pro | 1 | ||||
| -rw-r--r-- | binaryninjaapi.h | 12 | ||||
| -rw-r--r-- | functionrecognizer.cpp | 33 |
3 files changed, 46 insertions, 0 deletions
@@ -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(®); +} + + +bool FunctionRecognizer::RecognizeLowLevelIL(BinaryView*, Function*, LowLevelILFunction*) +{ + return false; +} |
