summaryrefslogtreecommitdiff
path: root/architecture.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2015-09-03 01:20:10 -0400
committerRusty Wagner <rusty@vector35.com>2015-09-03 01:20:10 -0400
commitfd5865d110b484e7841713a679024c78ca4105c9 (patch)
treedc1d2acfbe8b2044d02391e4fa68087d107ba7e0 /architecture.cpp
parent183385ae0c88ad5d8c070560bad4bd937129fb45 (diff)
Implement low level IL from Python
Diffstat (limited to 'architecture.cpp')
-rw-r--r--architecture.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/architecture.cpp b/architecture.cpp
index e4d3e4f0..14e5b780 100644
--- a/architecture.cpp
+++ b/architecture.cpp
@@ -180,6 +180,32 @@ uint32_t* Architecture::GetAllRegistersCallback(void* ctxt, size_t* count)
}
+uint32_t* Architecture::GetAllFlagsCallback(void* ctxt, size_t* count)
+{
+ Architecture* arch = (Architecture*)ctxt;
+ vector<uint32_t> regs = arch->GetAllFlags();
+ *count = regs.size();
+
+ uint32_t* result = new uint32_t[regs.size()];
+ for (size_t i = 0; i < regs.size(); i++)
+ result[i] = regs[i];
+ return result;
+}
+
+
+uint32_t* Architecture::GetAllFlagWriteTypesCallback(void* ctxt, size_t* count)
+{
+ Architecture* arch = (Architecture*)ctxt;
+ vector<uint32_t> regs = arch->GetAllFlagWriteTypes();
+ *count = regs.size();
+
+ uint32_t* result = new uint32_t[regs.size()];
+ for (size_t i = 0; i < regs.size(); i++)
+ result[i] = regs[i];
+ return result;
+}
+
+
void Architecture::FreeRegisterListCallback(void*, uint32_t* regs)
{
delete[] regs;
@@ -293,6 +319,8 @@ void Architecture::Register(Architecture* arch)
callbacks.getFlagWriteTypeName = GetFlagWriteTypeNameCallback;
callbacks.getFullWidthRegisters = GetFullWidthRegistersCallback;
callbacks.getAllRegisters = GetAllRegistersCallback;
+ callbacks.getAllFlags = GetAllFlagsCallback;
+ callbacks.getAllFlagWriteTypes = GetAllFlagWriteTypesCallback;
callbacks.freeRegisterList = FreeRegisterListCallback;
callbacks.getRegisterInfo = GetRegisterInfoCallback;
callbacks.getStackPointerRegister = GetStackPointerRegisterCallback;
@@ -394,6 +422,18 @@ vector<uint32_t> Architecture::GetAllRegisters()
}
+vector<uint32_t> Architecture::GetAllFlags()
+{
+ return vector<uint32_t>();
+}
+
+
+vector<uint32_t> Architecture::GetAllFlagWriteTypes()
+{
+ return vector<uint32_t>();
+}
+
+
BNRegisterInfo Architecture::GetRegisterInfo(uint32_t)
{
BNRegisterInfo result;
@@ -621,6 +661,34 @@ vector<uint32_t> CoreArchitecture::GetAllRegisters()
}
+vector<uint32_t> CoreArchitecture::GetAllFlags()
+{
+ size_t count;
+ uint32_t* regs = BNGetAllArchitectureFlags(m_arch, &count);
+
+ vector<uint32_t> result;
+ for (size_t i = 0; i < count; i++)
+ result.push_back(regs[i]);
+
+ BNFreeRegisterList(regs);
+ return result;
+}
+
+
+vector<uint32_t> CoreArchitecture::GetAllFlagWriteTypes()
+{
+ size_t count;
+ uint32_t* regs = BNGetAllArchitectureFlagWriteTypes(m_arch, &count);
+
+ vector<uint32_t> result;
+ for (size_t i = 0; i < count; i++)
+ result.push_back(regs[i]);
+
+ BNFreeRegisterList(regs);
+ return result;
+}
+
+
BNRegisterInfo CoreArchitecture::GetRegisterInfo(uint32_t reg)
{
return BNGetArchitectureRegisterInfo(m_arch, reg);