aboutsummaryrefslogtreecommitdiff
path: root/disassembler_elf.h
diff options
context:
space:
mode:
Diffstat (limited to 'disassembler_elf.h')
-rw-r--r--disassembler_elf.h47
1 files changed, 10 insertions, 37 deletions
diff --git a/disassembler_elf.h b/disassembler_elf.h
index 0bd11a6..353c444 100644
--- a/disassembler_elf.h
+++ b/disassembler_elf.h
@@ -63,6 +63,7 @@ struct AArch64ReferenceType {
};
struct Elf32Traits {
+ static constexpr uint16_t kVersion = 1;
static constexpr Bitness kBitness = kBit32;
static constexpr elf::FileClass kIdentificationClass = elf::ELFCLASS32;
using Elf_Shdr = elf::Elf32_Shdr;
@@ -94,6 +95,7 @@ struct ElfAArch32Traits : public Elf32Traits {
};
struct Elf64Traits {
+ static constexpr uint16_t kVersion = 1;
static constexpr Bitness kBitness = kBit64;
static constexpr elf::FileClass kIdentificationClass = elf::ELFCLASS64;
using Elf_Shdr = elf::Elf64_Shdr;
@@ -151,6 +153,7 @@ template <class TRAITS>
class DisassemblerElf : public Disassembler {
public:
using Traits = TRAITS;
+ static constexpr uint16_t kVersion = Traits::kVersion;
// Applies quick checks to determine whether |image| *may* point to the start
// of an executable. Returns true iff the check passes.
static bool QuickDetect(ConstBufferView image);
@@ -296,6 +299,13 @@ class DisassemblerElfArm : public DisassemblerElf<TRAITS> {
std::unique_ptr<ReferenceReader> MakeReadAbs32(offset_t lo, offset_t hi);
std::unique_ptr<ReferenceWriter> MakeWriteAbs32(MutableBufferView image);
+ // Specialized Read/Write functions for different rel32 address types.
+ template <class ADDR_TRAITS>
+ std::unique_ptr<ReferenceReader> MakeReadRel32(offset_t lower,
+ offset_t upper);
+ template <class ADDR_TRAITS>
+ std::unique_ptr<ReferenceWriter> MakeWriteRel32(MutableBufferView image);
+
protected:
// Sorted file offsets of rel32 locations for each rel32 address type.
std::deque<offset_t>
@@ -322,27 +332,6 @@ class DisassemblerElfAArch32 : public DisassemblerElfArm<ElfAArch32Traits> {
// or THUMB2 mode, this function implements heuristics to distinguish between
// the two. Returns true if section is THUMB2 mode; otherwise return false.
bool IsExecSectionThumb2(const typename Traits::Elf_Shdr& section) const;
-
- // Specialized Read/Write functions for different rel32 address types.
- std::unique_ptr<ReferenceReader> MakeReadRel32A24(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32A24(MutableBufferView image);
-
- std::unique_ptr<ReferenceReader> MakeReadRel32T8(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32T8(MutableBufferView image);
-
- std::unique_ptr<ReferenceReader> MakeReadRel32T11(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32T11(MutableBufferView image);
-
- std::unique_ptr<ReferenceReader> MakeReadRel32T20(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32T20(MutableBufferView image);
-
- std::unique_ptr<ReferenceReader> MakeReadRel32T24(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32T24(MutableBufferView image);
};
// Disassembler for ELF with AArch64 (AKA ARM64).
@@ -360,22 +349,6 @@ class DisassemblerElfAArch64 : public DisassemblerElfArm<ElfAArch64Traits> {
// DisassemblerElfArm:
std::unique_ptr<typename Traits::Rel32FinderUse> MakeRel32Finder(
const typename Traits::Elf_Shdr& section) override;
-
- // Specialized Read/Write functions for different rel32 address types.
- std::unique_ptr<ReferenceReader> MakeReadRel32Immd14(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32Immd14(
- MutableBufferView image);
-
- std::unique_ptr<ReferenceReader> MakeReadRel32Immd19(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32Immd19(
- MutableBufferView image);
-
- std::unique_ptr<ReferenceReader> MakeReadRel32Immd26(offset_t lower,
- offset_t upper);
- std::unique_ptr<ReferenceWriter> MakeWriteRel32Immd26(
- MutableBufferView image);
};
} // namespace zucchini