diff options
| author | Rusty Wagner <rusty@vector35.com> | 2015-08-29 23:48:01 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2015-08-29 23:48:01 -0400 |
| commit | c0e76778ad4149565de0f2729c6c36464fb522f0 (patch) | |
| tree | bfb6d430a59933f48a879f6fca6534d03237b0f6 | |
| parent | 00c92fcf81f6144a35936855b5cc47c945fae321 (diff) | |
Implement part of the Python API to register new architectures
| -rw-r--r-- | architecture.cpp | 14 | ||||
| -rw-r--r-- | binaryninjaapi.h | 3 |
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); |
