summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-08-29 23:48:01 -0400
committerRusty Wagner <rusty@vector35.com>2015-08-29 23:48:01 -0400
commitc0e76778ad4149565de0f2729c6c36464fb522f0 (patch)
treebfb6d430a59933f48a879f6fca6534d03237b0f6
parent00c92fcf81f6144a35936855b5cc47c945fae321 (diff)
Implement part of the Python API to register new architectures
-rw-r--r--architecture.cpp14
-rw-r--r--binaryninjaapi.h3
2 files changed, 13 insertions, 4 deletions
diff --git a/architecture.cpp b/architecture.cpp
index ae4dd225..e4d3e4f0 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -47,6 +47,13 @@ Architecture::Architecture(const string& name): m_nameForRegister(name)
}
+void Architecture::InitCallback(void* ctxt, BNArchitecture* obj)
+{
+ Architecture* arch = (Architecture*)ctxt;
+ arch->m_arch = obj;
+}
+
+
BNEndianness Architecture::GetEndiannessCallback(void* ctxt)
{
Architecture* arch = (Architecture*)ctxt;
@@ -179,10 +186,10 @@ void Architecture::FreeRegisterListCallback(void*, uint32_t* regs)
}
-BNRegisterInfo Architecture::GetRegisterInfoCallback(void* ctxt, uint32_t reg)
+void Architecture::GetRegisterInfoCallback(void* ctxt, uint32_t reg, BNRegisterInfo* result)
{
Architecture* arch = (Architecture*)ctxt;
- return arch->GetRegisterInfo(reg);
+ *result = arch->GetRegisterInfo(reg);
}
@@ -273,6 +280,7 @@ void Architecture::Register(Architecture* arch)
{
BNCustomArchitecture callbacks;
callbacks.context = arch;
+ callbacks.init = InitCallback;
callbacks.getEndianness = GetEndiannessCallback;
callbacks.getAddressSize = GetAddressSizeCallback;
callbacks.getDefaultIntegerSize = GetDefaultIntegerSizeCallback;
@@ -298,7 +306,7 @@ void Architecture::Register(Architecture* arch)
callbacks.alwaysBranch = AlwaysBranchCallback;
callbacks.invertBranch = InvertBranchCallback;
callbacks.skipAndReturnValue = SkipAndReturnValueCallback;
- arch->m_arch = BNRegisterArchitecture(arch->m_nameForRegister.c_str(), &callbacks);
+ BNRegisterArchitecture(arch->m_nameForRegister.c_str(), &callbacks);
}
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 2c6f4b03..94857d52 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -831,6 +831,7 @@ namespace BinaryNinja
Architecture(BNArchitecture* arch);
+ static void InitCallback(void* ctxt, BNArchitecture* obj);
static BNEndianness GetEndiannessCallback(void* ctxt);
static size_t GetAddressSizeCallback(void* ctxt);
static size_t GetDefaultIntegerSizeCallback(void* ctxt);
@@ -847,7 +848,7 @@ namespace BinaryNinja
static uint32_t* GetFullWidthRegistersCallback(void* ctxt, size_t* count);
static uint32_t* GetAllRegistersCallback(void* ctxt, size_t* count);
static void FreeRegisterListCallback(void* ctxt, uint32_t* regs);
- static BNRegisterInfo GetRegisterInfoCallback(void* ctxt, uint32_t reg);
+ static void GetRegisterInfoCallback(void* ctxt, uint32_t reg, BNRegisterInfo* result);
static uint32_t GetStackPointerRegisterCallback(void* ctxt);
static bool AssembleCallback(void* ctxt, const char* code, uint64_t addr, BNDataBuffer* result, char** errors);