summaryrefslogtreecommitdiff
path: root/binaryninjaapi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'binaryninjaapi.cpp')
-rw-r--r--binaryninjaapi.cpp143
1 files changed, 141 insertions, 2 deletions
diff --git a/binaryninjaapi.cpp b/binaryninjaapi.cpp
index f98dfef7..68cc2f43 100644
--- a/binaryninjaapi.cpp
+++ b/binaryninjaapi.cpp
@@ -24,6 +24,12 @@ using namespace BinaryNinja;
using namespace std;
+struct WorkerThreadActionContext
+{
+ std::function<void()> action;
+};
+
+
void BinaryNinja::InitCorePlugins()
{
BNInitCorePlugins();
@@ -53,6 +59,17 @@ void BinaryNinja::SetBundledPluginDirectory(const string& path)
}
+string BinaryNinja::GetInstallDirectory()
+{
+ char* path = BNGetInstallDirectory();
+ if (!path)
+ return string();
+ string result = path;
+ BNFreeString(path);
+ return result;
+}
+
+
string BinaryNinja::GetUserPluginDirectory()
{
char* path = BNGetUserPluginDirectory();
@@ -87,7 +104,7 @@ string BinaryNinja::GetPathRelativeToUserPluginDirectory(const string& rel)
bool BinaryNinja::ExecuteWorkerProcess(const string& path, const vector<string>& args, const DataBuffer& input,
- string& output, string& errors)
+ string& output, string& errors, bool stdoutIsText, bool stderrIsText)
{
const char** argArray = new const char*[args.size() + 1];
for (size_t i = 0; i < args.size(); i++)
@@ -96,7 +113,8 @@ bool BinaryNinja::ExecuteWorkerProcess(const string& path, const vector<string>&
char* outputStr;
char* errorStr;
- bool result = BNExecuteWorkerProcess(path.c_str(), argArray, input.GetBufferObject(), &outputStr, &errorStr);
+ bool result = BNExecuteWorkerProcess(path.c_str(), argArray, input.GetBufferObject(), &outputStr, &errorStr,
+ stdoutIsText, stderrIsText);
output = outputStr;
errors = errorStr;
@@ -115,6 +133,26 @@ string BinaryNinja::GetVersionString()
return result;
}
+string BinaryNinja::GetProduct()
+{
+ char* str = BNGetProduct();
+ string result = str;
+ BNFreeString(str);
+ return result;
+}
+
+string BinaryNinja::GetProductType()
+{
+ char* str = BNGetProductType();
+ string result = str;
+ BNFreeString(str);
+ return result;
+}
+
+int BinaryNinja::GetLicenseCount()
+{
+ return BNGetLicenseCount();
+}
uint32_t BinaryNinja::GetBuildId()
{
@@ -138,3 +176,104 @@ void BinaryNinja::AddOptionalPluginDependency(const string& name)
{
BNAddOptionalPluginDependency(name.c_str());
}
+
+
+static void WorkerActionCallback(void* ctxt)
+{
+ WorkerThreadActionContext* action = (WorkerThreadActionContext*)ctxt;
+ action->action();
+ delete action;
+}
+
+
+void BinaryNinja::WorkerEnqueue(const function<void()>& action)
+{
+ WorkerThreadActionContext* ctxt = new WorkerThreadActionContext;
+ ctxt->action = action;
+ BNWorkerEnqueue(ctxt, WorkerActionCallback);
+}
+
+
+void BinaryNinja::WorkerEnqueue(RefCountObject* owner, const function<void()>& action)
+{
+ struct
+ {
+ Ref<RefCountObject> owner;
+ function<void()> func;
+ } context;
+ context.owner = owner;
+ context.func = action;
+
+ WorkerEnqueue([=]() {
+ context.func();
+ });
+}
+
+
+void BinaryNinja::WorkerPriorityEnqueue(const function<void()>& action)
+{
+ WorkerThreadActionContext* ctxt = new WorkerThreadActionContext;
+ ctxt->action = action;
+ BNWorkerPriorityEnqueue(ctxt, WorkerActionCallback);
+}
+
+
+void BinaryNinja::WorkerPriorityEnqueue(RefCountObject* owner, const function<void()>& action)
+{
+ struct
+ {
+ Ref<RefCountObject> owner;
+ function<void()> func;
+ } context;
+ context.owner = owner;
+ context.func = action;
+
+ WorkerPriorityEnqueue([=]() {
+ context.func();
+ });
+}
+
+
+void BinaryNinja::WorkerInteractiveEnqueue(const function<void()>& action)
+{
+ WorkerThreadActionContext* ctxt = new WorkerThreadActionContext;
+ ctxt->action = action;
+ BNWorkerInteractiveEnqueue(ctxt, WorkerActionCallback);
+}
+
+
+void BinaryNinja::WorkerInteractiveEnqueue(RefCountObject* owner, const function<void()>& action)
+{
+ struct
+ {
+ Ref<RefCountObject> owner;
+ function<void()> func;
+ } context;
+ context.owner = owner;
+ context.func = action;
+
+ WorkerInteractiveEnqueue([=]() {
+ context.func();
+ });
+}
+
+
+size_t BinaryNinja::GetWorkerThreadCount()
+{
+ return BNGetWorkerThreadCount();
+}
+
+
+void BinaryNinja::SetWorkerThreadCount(size_t count)
+{
+ BNSetWorkerThreadCount(count);
+}
+
+
+string BinaryNinja::GetUniqueIdentifierString()
+{
+ char* str = BNGetUniqueIdentifierString();
+ string result = str;
+ BNFreeString(str);
+ return result;
+}