summaryrefslogtreecommitdiff
path: root/binaryninjaapi.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-09-01 00:18:59 -0400
committerRusty Wagner <rusty@vector35.com>2015-09-01 16:45:32 -0400
commit183385ae0c88ad5d8c070560bad4bd937129fb45 (patch)
tree6fc220ec082d39540fa87d4ee01446388acf4b8e /binaryninjaapi.cpp
parentc0e76778ad4149565de0f2729c6c36464fb522f0 (diff)
Add user plugins and Python plugin support
Diffstat (limited to 'binaryninjaapi.cpp')
-rw-r--r--binaryninjaapi.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/binaryninjaapi.cpp b/binaryninjaapi.cpp
new file mode 100644
index 00000000..f5999003
--- /dev/null
+++ b/binaryninjaapi.cpp
@@ -0,0 +1,87 @@
+#include "binaryninjaapi.h"
+
+using namespace BinaryNinja;
+using namespace std;
+
+
+void BinaryNinja::InitCorePlugins()
+{
+ BNInitCorePlugins();
+}
+
+
+void BinaryNinja::InitUserPlugins()
+{
+ BNInitUserPlugins();
+}
+
+
+string BinaryNinja::GetBundledPluginDirectory()
+{
+ char* path = BNGetBundledPluginDirectory();
+ if (!path)
+ return string();
+ string result = path;
+ BNFreeString(path);
+ return result;
+}
+
+
+void BinaryNinja::SetBundledPluginDirectory(const string& path)
+{
+ BNSetBundledPluginDirectory(path.c_str());
+}
+
+
+string BinaryNinja::GetUserPluginDirectory()
+{
+ char* path = BNGetUserPluginDirectory();
+ if (!path)
+ return string();
+ string result = path;
+ BNFreeString(path);
+ return result;
+}
+
+
+string BinaryNinja::GetPathRelativeToBundledPluginDirectory(const string& rel)
+{
+ char* path = BNGetPathRelativeToBundledPluginDirectory(rel.c_str());
+ if (!path)
+ return rel;
+ string result = path;
+ BNFreeString(path);
+ return result;
+}
+
+
+string BinaryNinja::GetPathRelativeToUserPluginDirectory(const string& rel)
+{
+ char* path = BNGetPathRelativeToUserPluginDirectory(rel.c_str());
+ if (!path)
+ return rel;
+ string result = path;
+ BNFreeString(path);
+ return result;
+}
+
+
+bool BinaryNinja::ExecuteWorkerProcess(const string& path, const vector<string>& args, const DataBuffer& input,
+ string& output, string& errors)
+{
+ const char** argArray = new const char*[args.size() + 1];
+ for (size_t i = 0; i < args.size(); i++)
+ argArray[i] = args[i].c_str();
+ argArray[args.size()] = nullptr;
+
+ char* outputStr;
+ char* errorStr;
+ bool result = BNExecuteWorkerProcess(path.c_str(), argArray, input.GetBufferObject(), &outputStr, &errorStr);
+
+ output = outputStr;
+ errors = errorStr;
+ BNFreeString(outputStr);
+ BNFreeString(errorStr);
+ delete[] argArray;
+ return result;
+}