| Index: courgette/disassembler.h
|
| diff --git a/courgette/disassembler.h b/courgette/disassembler.h
|
| index ff2dd692a08c467da00a90ba359ebc0f385f3204..379a75aa376a745fb0521a7a264145643fac09e2 100644
|
| --- a/courgette/disassembler.h
|
| +++ b/courgette/disassembler.h
|
| @@ -7,11 +7,13 @@
|
|
|
| #include <stdint.h>
|
|
|
| +#include <memory>
|
| #include <vector>
|
|
|
| #include "base/macros.h"
|
| #include "courgette/courgette.h"
|
| #include "courgette/image_utils.h"
|
| +#include "courgette/instruction_utils.h"
|
|
|
| namespace courgette {
|
|
|
| @@ -66,6 +68,12 @@ class Disassembler : public AddressTranslator {
|
| // general case of 64-bit architectures.
|
| virtual uint64_t image_base() const = 0;
|
|
|
| + // Extracts and stores locations of abs32 references from the image file.
|
| + virtual bool ExtractAbs32Locations() = 0;
|
| +
|
| + // Extracts and stores locations of rel32 references from the image file.
|
| + virtual bool ExtractRel32Locations() = 0;
|
| +
|
| // Returns a caller-owned new RvaVisitor to iterate through abs32 target RVAs.
|
| virtual RvaVisitor* CreateAbs32TargetRvaVisitor() = 0;
|
|
|
| @@ -74,16 +82,18 @@ class Disassembler : public AddressTranslator {
|
|
|
| // Removes unused rel32 locations (architecture-specific). This is needed
|
| // because we may remove rel32 Labels along the way. As a result the matching
|
| - // matching rel32 addresses become unused. Removing them saves space.
|
| + // rel32 addresses become unused. Removing them saves space.
|
| virtual void RemoveUnusedRel32Locations(AssemblyProgram* program) = 0;
|
|
|
| - // Returns true if the buffer appears to be a valid executable of the expected
|
| - // type, and false otherwise. This needs not be called before Disassemble().
|
| + // Extracts structural data from the main image. Returns true if the image
|
| + // appears to be a valid executable of the expected type, or false otherwise.
|
| + // This needs to be called before Disassemble().
|
| virtual bool ParseHeader() = 0;
|
|
|
| - // Disassembles the item passed to the factory method into the output
|
| - // parameter 'program'.
|
| - virtual bool Disassemble(AssemblyProgram* program) = 0;
|
| + // Extracts and stores references from the main image. Returns a new
|
| + // AssemblyProgram initialized using data parsed from the main image, or null
|
| + // on failure.
|
| + std::unique_ptr<AssemblyProgram> Disassemble();
|
|
|
| // ok() may always be called but returns true only after ParseHeader()
|
| // succeeds.
|
| @@ -112,6 +122,11 @@ class Disassembler : public AddressTranslator {
|
| // (or realloc) any memory. Usually only called via ParseHeader().
|
| void ReduceLength(size_t reduced_length);
|
|
|
| + // Returns a generator that emits instructions to a given receptor. |program|
|
| + // is required as helper.
|
| + virtual InstructionGenerator GetInstructionGenerator(
|
| + AssemblyProgram* program) = 0;
|
| +
|
| private:
|
| const char* failure_reason_;
|
|
|
|
|