From a401883aa235b222ceed191f455a776b23a3a689 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 14 Aug 2015 02:45:01 -0400 Subject: Recognize PLT entries on x86 Linux --- api.pro | 1 + binaryninjaapi.h | 12 ++++++++++++ functionrecognizer.cpp | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 functionrecognizer.cpp 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 dataObj = new BinaryView(BNNewViewReference(data)); + Ref funcObj = new Function(BNNewFunctionReference(func)); + Ref 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; +} -- cgit v1.3.1