diff options
Diffstat (limited to 'courgette/disassembler_elf_32_x86.h')
-rw-r--r-- | courgette/disassembler_elf_32_x86.h | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/courgette/disassembler_elf_32_x86.h b/courgette/disassembler_elf_32_x86.h deleted file mode 100644 index c797a8b..0000000 --- a/courgette/disassembler_elf_32_x86.h +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COURGETTE_DISASSEMBLER_ELF_32_X86_H_ -#define COURGETTE_DISASSEMBLER_ELF_32_X86_H_ - -#include "base/basictypes.h" -#include "courgette/disassembler.h" -#include "courgette/memory_allocator.h" -#include "courgette/types_elf.h" - -namespace courgette { - -class AssemblyProgram; - -class DisassemblerElf32X86 : public Disassembler { - public: - explicit DisassemblerElf32X86(const void* start, size_t length); - - virtual ExecutableType kind() { return EXE_ELF_32_X86; } - - // Returns 'true' if the buffer appears to point to a valid ELF executable - // for X86 32 bitWindows 32 bit. If ParseHeader() succeeds, other member - // functions may be called. - virtual bool ParseHeader(); - - virtual bool Disassemble(AssemblyProgram* target); - - // Public for unittests only - std::vector<RVA> &Abs32Locations() { return abs32_locations_; } - std::vector<RVA> &Rel32Locations() { return rel32_locations_; } - - protected: - - uint32 DiscoverLength(); - - // Misc Section Helpers - - const Elf32_Half SectionHeaderCount() const { - return section_header_table_size_; - } - - const Elf32_Shdr *SectionHeader(int id) const { - assert(id >= 0 && id < SectionHeaderCount()); - return section_header_table_ + id; - } - - const uint8 *SectionBody(int id) const { - return OffsetToPointer(SectionHeader(id)->sh_offset); - } - - const Elf32_Word SectionBodySize(int id) const { - return SectionHeader(id)->sh_size; - } - - // Misc Segment Helpers - - const Elf32_Half ProgramSegmentHeaderCount() const { - return program_header_table_size_; - } - - const Elf32_Phdr *ProgramSegmentHeader(int id) const { - assert(id >= 0 && id < ProgramSegmentHeaderCount()); - return program_header_table_ + id; - } - - // The virtual memory address at which this program segment will be loaded - const Elf32_Addr ProgramSegmentMemoryBegin(int id) const { - return ProgramSegmentHeader(id)->p_vaddr; - } - - // The number of virtual memory bytes for this program segment - const Elf32_Word ProgramSegmentMemorySize(int id) const { - return ProgramSegmentHeader(id)->p_memsz; - } - - // Pointer into the source file for this program segment - const Elf32_Addr ProgramSegmentFileOffset(int id) const { - return ProgramSegmentHeader(id)->p_offset; - } - - // Number of file bytes for this program segment. Is <= ProgramMemorySize. - const Elf32_Word ProgramSegmentFileSize(int id) const { - return ProgramSegmentHeader(id)->p_filesz; - } - - // Misc address space helpers - - CheckBool IsValidRVA(RVA rva) const WARN_UNUSED_RESULT; - - // Convert an ELF relocation struction into an RVA - CheckBool RelToRVA(Elf32_Rel rel, RVA* result) const WARN_UNUSED_RESULT; - - // Returns kNoOffset if there is no file offset corresponding to 'rva'. - CheckBool RVAToFileOffset(RVA rva, size_t* result) const WARN_UNUSED_RESULT; - - RVA FileOffsetToRVA(size_t offset) const WARN_UNUSED_RESULT; - - CheckBool RVAsToOffsets(std::vector<RVA>* rvas /*in*/, - std::vector<size_t>* offsets /*out*/); - - // Parsing Code used to really implement Disassemble - - CheckBool ParseFile(AssemblyProgram* target) WARN_UNUSED_RESULT; - CheckBool ParseRelocationSection( - const Elf32_Shdr *section_header, - AssemblyProgram* program) WARN_UNUSED_RESULT; - CheckBool ParseProgbitsSection( - const Elf32_Shdr *section_header, - std::vector<size_t>::iterator* current_abs_offset, - std::vector<size_t>::iterator end_abs_offset, - std::vector<size_t>::iterator* current_rel_offset, - std::vector<size_t>::iterator end_rel_offset, - AssemblyProgram* program) WARN_UNUSED_RESULT; - CheckBool ParseSimpleRegion(size_t start_file_offset, - size_t end_file_offset, - AssemblyProgram* program) WARN_UNUSED_RESULT; - - CheckBool ParseAbs32Relocs() WARN_UNUSED_RESULT; - CheckBool ParseRel32RelocsFromSections() WARN_UNUSED_RESULT; - CheckBool ParseRel32RelocsFromSection( - const Elf32_Shdr* section) WARN_UNUSED_RESULT; - - Elf32_Ehdr *header_; - Elf32_Shdr *section_header_table_; - Elf32_Half section_header_table_size_; - - Elf32_Phdr *program_header_table_; - Elf32_Half program_header_table_size_; - - // Section header for default - const char *default_string_section_; - - std::vector<RVA> abs32_locations_; - std::vector<RVA> rel32_locations_; - - DISALLOW_COPY_AND_ASSIGN(DisassemblerElf32X86); -}; - -} // namespace courgette - -#endif // COURGETTE_DISASSEMBLER_ELF_32_X86_H_ |