summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
authorJordan Wiens <jordan@psifertex.com>2016-08-18 22:48:36 -0400
committerJordan Wiens <jordan@psifertex.com>2016-08-18 22:48:36 -0400
commitc14db29d86617ba3b040086f1f3388d8f8c5ccd1 (patch)
tree15e0aad15a652bd8381ab493de3e1be7c7bc4ff5 /binaryninjaapi.h
parentdbb2bd3b4f329e867fac03ee11501c3529910c2e (diff)
parente29b88a95e41aeb579b4d3bbfc0869acf1282c8b (diff)
Merge branch 'dev' of github.com:Vector35/binaryninja-api into dev
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 2b2ccc48..d3234dcc 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -273,6 +273,8 @@ namespace BinaryNinja
class Platform;
class Type;
class DataBuffer;
+ class MainThreadAction;
+ class MainThreadActionHandler;
/*! Logs to the error console with the given BNLogLevel.
@@ -365,6 +367,10 @@ namespace BinaryNinja
Type** outType,
std::vector<std::string>& outVarName);
+ void RegisterMainThread(MainThreadActionHandler* handler);
+ Ref<MainThreadAction> ExecuteOnMainThread(const std::function<void()>& action);
+ void ExecuteOnMainThreadAndWait(const std::function<void()>& action);
+
class DataBuffer
{
BNDataBuffer* m_buffer;
@@ -2062,4 +2068,111 @@ namespace BinaryNinja
Ref<Platform> GetRelatedPlatform(Architecture* arch);
void AddRelatedPlatform(Architecture* arch, Platform* platform);
};
+
+ class ScriptingOutputListener
+ {
+ BNScriptingOutputListener m_callbacks;
+
+ static void OutputCallback(void* ctxt, const char* text);
+ static void ErrorCallback(void* ctxt, const char* text);
+ static void InputReadyStateChangedCallback(void* ctxt, BNScriptingProviderInputReadyState state);
+
+ public:
+ ScriptingOutputListener();
+ BNScriptingOutputListener& GetCallbacks() { return m_callbacks; }
+
+ virtual void NotifyOutput(const std::string& text);
+ virtual void NotifyError(const std::string& text);
+ virtual void NotifyInputReadyStateChanged(BNScriptingProviderInputReadyState state);
+ };
+
+ class ScriptingProvider;
+
+ class ScriptingInstance: public CoreRefCountObject<BNScriptingInstance,
+ BNNewScriptingInstanceReference, BNFreeScriptingInstance>
+ {
+ protected:
+ ScriptingInstance(ScriptingProvider* provider);
+ ScriptingInstance(BNScriptingInstance* instance);
+
+ static void DestroyInstanceCallback(void* ctxt);
+ static BNScriptingProviderExecuteResult ExecuteScriptInputCallback(void* ctxt, const char* input);
+ static void SetCurrentBinaryViewCallback(void* ctxt, BNBinaryView* view);
+ static void SetCurrentFunctionCallback(void* ctxt, BNFunction* func);
+ static void SetCurrentBasicBlockCallback(void* ctxt, BNBasicBlock* block);
+ static void SetCurrentAddressCallback(void* ctxt, uint64_t addr);
+ static void SetCurrentSelectionCallback(void* ctxt, uint64_t begin, uint64_t end);
+
+ virtual void DestroyInstance();
+
+ public:
+ virtual BNScriptingProviderExecuteResult ExecuteScriptInput(const std::string& input) = 0;
+ virtual void SetCurrentBinaryView(BinaryView* view);
+ virtual void SetCurrentFunction(Function* func);
+ virtual void SetCurrentBasicBlock(BasicBlock* block);
+ virtual void SetCurrentAddress(uint64_t addr);
+ virtual void SetCurrentSelection(uint64_t begin, uint64_t end);
+
+ void Output(const std::string& text);
+ void Error(const std::string& text);
+ void InputReadyStateChanged(BNScriptingProviderInputReadyState state);
+ BNScriptingProviderInputReadyState GetInputReadyState();
+
+ void RegisterOutputListener(ScriptingOutputListener* listener);
+ void UnregisterOutputListener(ScriptingOutputListener* listener);
+ };
+
+ class CoreScriptingInstance: public ScriptingInstance
+ {
+ public:
+ CoreScriptingInstance(BNScriptingInstance* instance);
+
+ virtual BNScriptingProviderExecuteResult ExecuteScriptInput(const std::string& input) override;
+ virtual void SetCurrentBinaryView(BinaryView* view) override;
+ virtual void SetCurrentFunction(Function* func) override;
+ virtual void SetCurrentBasicBlock(BasicBlock* block) override;
+ virtual void SetCurrentAddress(uint64_t addr) override;
+ virtual void SetCurrentSelection(uint64_t begin, uint64_t end) override;
+ };
+
+ class ScriptingProvider: public StaticCoreRefCountObject<BNScriptingProvider>
+ {
+ std::string m_nameForRegister;
+
+ protected:
+ ScriptingProvider(const std::string& name);
+ ScriptingProvider(BNScriptingProvider* provider);
+
+ static BNScriptingInstance* CreateInstanceCallback(void* ctxt);
+
+ public:
+ virtual Ref<ScriptingInstance> CreateNewInstance() = 0;
+
+ static std::vector<Ref<ScriptingProvider>> GetList();
+ static Ref<ScriptingProvider> GetByName(const std::string& name);
+ static void Register(ScriptingProvider* provider);
+ };
+
+ class CoreScriptingProvider: public ScriptingProvider
+ {
+ public:
+ CoreScriptingProvider(BNScriptingProvider* provider);
+ virtual Ref<ScriptingInstance> CreateNewInstance() override;
+ };
+
+ class MainThreadAction: public CoreRefCountObject<BNMainThreadAction,
+ BNNewMainThreadActionReference, BNFreeMainThreadAction>
+ {
+ public:
+ MainThreadAction(BNMainThreadAction* action);
+ void Execute();
+ bool IsDone() const;
+ void Wait();
+ };
+
+ class MainThreadActionHandler
+ {
+ public:
+ virtual void AddMainThreadAction(MainThreadAction* action) = 0;
+ };
}