From 2c2f521aa188d4f8027c5db8dfaf88f670d8a63f Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 15 Jul 2016 21:15:37 -0400 Subject: Add API for instruction length and option for showing opcodes in disassembly --- architecture.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'architecture.cpp') diff --git a/architecture.cpp b/architecture.cpp index accfa69f..d068ff36 100644 --- a/architecture.cpp +++ b/architecture.cpp @@ -97,6 +97,20 @@ size_t Architecture::GetDefaultIntegerSizeCallback(void* ctxt) } +size_t Architecture::GetMaxInstructionLengthCallback(void* ctxt) +{ + Architecture* arch = (Architecture*)ctxt; + return arch->GetMaxInstructionLength(); +} + + +size_t Architecture::GetOpcodeDisplayLengthCallback(void* ctxt) +{ + Architecture* arch = (Architecture*)ctxt; + return arch->GetOpcodeDisplayLength(); +} + + bool Architecture::GetInstructionInfoCallback(void* ctxt, const uint8_t* data, uint64_t addr, size_t maxLen, BNInstructionInfo* result) { @@ -390,6 +404,8 @@ void Architecture::Register(Architecture* arch) callbacks.getEndianness = GetEndiannessCallback; callbacks.getAddressSize = GetAddressSizeCallback; callbacks.getDefaultIntegerSize = GetDefaultIntegerSizeCallback; + callbacks.getMaxInstructionLength = GetMaxInstructionLengthCallback; + callbacks.getOpcodeDisplayLength = GetOpcodeDisplayLengthCallback; callbacks.getInstructionInfo = GetInstructionInfoCallback; callbacks.getInstructionText = GetInstructionTextCallback; callbacks.freeInstructionText = FreeInstructionTextCallback; @@ -466,6 +482,21 @@ size_t Architecture::GetDefaultIntegerSize() const } +size_t Architecture::GetMaxInstructionLength() const +{ + return BN_DEFAULT_NSTRUCTION_LENGTH; +} + + +size_t Architecture::GetOpcodeDisplayLength() const +{ + size_t maxLen = GetMaxInstructionLength(); + if (maxLen < BN_DEFAULT_OPCODE_DISPLAY) + return maxLen; + return BN_DEFAULT_OPCODE_DISPLAY; +} + + bool Architecture::GetInstructionLowLevelIL(const uint8_t*, uint64_t, size_t&, LowLevelILFunction& il) { il.AddInstruction(il.Undefined()); @@ -874,6 +905,18 @@ size_t CoreArchitecture::GetDefaultIntegerSize() const } +size_t CoreArchitecture::GetMaxInstructionLength() const +{ + return BNGetArchitectureMaxInstructionLength(m_object); +} + + +size_t CoreArchitecture::GetOpcodeDisplayLength() const +{ + return BNGetArchitectureOpcodeDisplayLength(m_object); +} + + bool CoreArchitecture::GetInstructionInfo(const uint8_t* data, uint64_t addr, size_t maxLen, InstructionInfo& result) { return BNGetInstructionInfo(m_object, data, addr, maxLen, &result); -- cgit v1.3.1