| Index: courgette/assembly_program.h
|
| diff --git a/courgette/assembly_program.h b/courgette/assembly_program.h
|
| index a3bab07bbd65639694efe288d584e9bc8ca469e0..9eb693e25d30974925d5f7ef99914b344875abea 100644
|
| --- a/courgette/assembly_program.h
|
| +++ b/courgette/assembly_program.h
|
| @@ -16,6 +16,7 @@
|
| #include "base/memory/free_deleter.h"
|
| #include "courgette/courgette.h"
|
| #include "courgette/image_utils.h"
|
| +#include "courgette/instruction_utils.h"
|
| #include "courgette/label_manager.h"
|
| #include "courgette/memory_allocator.h"
|
|
|
| @@ -55,49 +56,6 @@ class Instruction {
|
| DISALLOW_COPY_AND_ASSIGN(Instruction);
|
| };
|
|
|
| -// An interface to receive emitted instructions parsed from an executable.
|
| -class InstructionReceptor {
|
| - public:
|
| - InstructionReceptor() = default;
|
| - virtual ~InstructionReceptor() = default;
|
| -
|
| - // Generates an entire base relocation table.
|
| - virtual CheckBool EmitPeRelocs() = 0;
|
| -
|
| - // Generates an ELF style relocation table for X86.
|
| - virtual CheckBool EmitElfRelocation() = 0;
|
| -
|
| - // Generates an ELF style relocation table for ARM.
|
| - virtual CheckBool EmitElfARMRelocation() = 0;
|
| -
|
| - // Following instruction will be assembled at address 'rva'.
|
| - virtual CheckBool EmitOrigin(RVA rva) = 0;
|
| -
|
| - // Generates a single byte of data or machine instruction.
|
| - virtual CheckBool EmitSingleByte(uint8_t byte) = 0;
|
| -
|
| - // Generates multiple bytes of data or machine instructions.
|
| - virtual CheckBool EmitMultipleBytes(const uint8_t* bytes, size_t len) = 0;
|
| -
|
| - // Generates a 4-byte relative reference to address of 'label'.
|
| - virtual CheckBool EmitRel32(Label* label) = 0;
|
| -
|
| - // Generates a 4-byte relative reference to address of 'label' for ARM.
|
| - virtual CheckBool EmitRel32ARM(uint16_t op,
|
| - Label* label,
|
| - const uint8_t* arm_op,
|
| - uint16_t op_size) = 0;
|
| -
|
| - // Generates a 4-byte absolute reference to address of 'label'.
|
| - virtual CheckBool EmitAbs32(Label* label) = 0;
|
| -
|
| - // Generates an 8-byte absolute reference to address of 'label'.
|
| - virtual CheckBool EmitAbs64(Label* label) = 0;
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(InstructionReceptor);
|
| -};
|
| -
|
| // An AssemblyProgram is the result of disassembling an executable file.
|
| //
|
| // * The disassembler creates labels in the AssemblyProgram and emits
|
| @@ -122,14 +80,6 @@ class AssemblyProgram {
|
| using LabelHandler = base::Callback<void(Label*)>;
|
| using LabelHandlerMap = std::map<OP, LabelHandler>;
|
|
|
| - // A callback for GenerateInstructions() to emit instructions. The first
|
| - // argument (AssemblyProgram*) is provided for Label-related feature access.
|
| - // The second argument (InstructionReceptor*) is a receptor for instructions.
|
| - // The callback (which gets called in 2 passes) should return true on success,
|
| - // and false otherwise.
|
| - using InstructionGenerator =
|
| - base::Callback<CheckBool(AssemblyProgram*, InstructionReceptor*)>;
|
| -
|
| AssemblyProgram(ExecutableType kind, uint64_t image_base);
|
| ~AssemblyProgram();
|
|
|
|
|