summaryrefslogtreecommitdiff
path: root/arch/armv7/arch_armv7.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty.wagner@gmail.com>2024-03-05 19:50:13 -0500
committerRusty Wagner <rusty.wagner@gmail.com>2024-03-05 20:34:34 -0500
commite093c21ed880ac3eb72119be15093ee04f8ce299 (patch)
tree9f720ebdc0ae415734b1199ed341668c69710a94 /arch/armv7/arch_armv7.h
parent0609276712622908254065546102381466033141 (diff)
Move architecture modules into the API repo
Diffstat (limited to 'arch/armv7/arch_armv7.h')
-rw-r--r--arch/armv7/arch_armv7.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/arch/armv7/arch_armv7.h b/arch/armv7/arch_armv7.h
new file mode 100644
index 00000000..171272f6
--- /dev/null
+++ b/arch/armv7/arch_armv7.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "binaryninjaapi.h"
+#include "armv7.h"
+
+#define BINARYNINJA_MANUAL_RELOCATION ((uint64_t)-2)
+
+class ArmCommonArchitecture: public BinaryNinja::Architecture
+{
+protected:
+ BNEndianness m_endian;
+ BinaryNinja::Ref<BinaryNinja::Architecture> m_armArch, m_thumbArch;
+
+ virtual std::string GetAssemblerTriple() = 0;
+
+public:
+ ArmCommonArchitecture(const char* name, BNEndianness endian);
+ void SetArmAndThumbArchitectures(Architecture* arm, Architecture* thumb);
+
+ virtual size_t GetAddressSize() const override;
+ virtual BNEndianness GetEndianness() const override;
+ virtual BinaryNinja::Ref<BinaryNinja::Architecture> GetAssociatedArchitectureByAddress(uint64_t& addr) override;
+ virtual std::string GetFlagName(uint32_t flag) override;
+ virtual std::string GetFlagWriteTypeName(uint32_t flags) override;
+ virtual BNFlagRole GetFlagRole(uint32_t flag, uint32_t semClass = 0) override;
+ virtual std::vector<uint32_t> GetFlagsWrittenByFlagWriteType(uint32_t flags) override;
+ virtual std::vector<uint32_t> GetFlagsRequiredForFlagCondition(BNLowLevelILFlagCondition cond, uint32_t semClass) override;
+ virtual size_t GetFlagWriteLowLevelIL(BNLowLevelILOperation op, size_t size, uint32_t flagWriteType, uint32_t flag,
+ BNRegisterOrConstant* operands, size_t operandCount, BinaryNinja::LowLevelILFunction& il) override;
+ virtual std::string GetRegisterName(uint32_t reg) override;
+ virtual std::vector<uint32_t> GetFullWidthRegisters() override;
+ virtual std::vector<uint32_t> GetAllRegisters() override;
+ virtual std::vector<uint32_t> GetAllFlags() override;
+ virtual std::vector<uint32_t> GetAllFlagWriteTypes() override;
+ virtual BNRegisterInfo GetRegisterInfo(uint32_t reg) override;
+ virtual uint32_t GetStackPointerRegister() override;
+ virtual uint32_t GetLinkRegister() override;
+ virtual bool CanAssemble() override;
+ virtual bool Assemble(const std::string& code, uint64_t addr, BinaryNinja::DataBuffer& result,
+ std::string& errors) override;
+};
+
+ArmCommonArchitecture* InitThumb2Architecture(const char* name, BNEndianness endian);