| Index: courgette/disassembler_win32.cc
|
| diff --git a/courgette/disassembler_win32.cc b/courgette/disassembler_win32.cc
|
| index f677a0692417134c1dd237a75e6259ca2c30b264..ec3648520b5a0e9ae31767559d783d3301671ed3 100644
|
| --- a/courgette/disassembler_win32.cc
|
| +++ b/courgette/disassembler_win32.cc
|
| @@ -221,27 +221,6 @@ bool DisassemblerWin32::ParseHeader() {
|
| return Good();
|
| }
|
|
|
| -bool DisassemblerWin32::Disassemble(AssemblyProgram* program) {
|
| - if (!ok())
|
| - return false;
|
| -
|
| - if (!ParseAbs32Relocs())
|
| - return false;
|
| -
|
| - ParseRel32RelocsFromSections();
|
| -
|
| - PrecomputeLabels(program);
|
| - RemoveUnusedRel32Locations(program);
|
| -
|
| - if (!program->GenerateInstructions(
|
| - base::Bind(&DisassemblerWin32::ParseFile, base::Unretained(this)))) {
|
| - return false;
|
| - }
|
| -
|
| - program->DefaultAssignIndexes();
|
| - return true;
|
| -}
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| bool DisassemblerWin32::ParseRelocs(std::vector<RVA>* relocs) {
|
| @@ -365,7 +344,7 @@ bool DisassemblerWin32::QuickDetect(const uint8_t* start,
|
| return true;
|
| }
|
|
|
| -bool DisassemblerWin32::ParseAbs32Relocs() {
|
| +bool DisassemblerWin32::ExtractAbs32Locations() {
|
| abs32_locations_.clear();
|
| if (!ParseRelocs(&abs32_locations_))
|
| return false;
|
| @@ -380,7 +359,7 @@ bool DisassemblerWin32::ParseAbs32Relocs() {
|
| return true;
|
| }
|
|
|
| -void DisassemblerWin32::ParseRel32RelocsFromSections() {
|
| +bool DisassemblerWin32::ExtractRel32Locations() {
|
| FileOffset file_offset = 0;
|
| while (file_offset < length()) {
|
| const Section* section = FindNextSection(file_offset);
|
| @@ -417,6 +396,7 @@ void DisassemblerWin32::ParseRel32RelocsFromSections() {
|
| }
|
| VLOG(1) << "common " << common;
|
| #endif
|
| + return true;
|
| }
|
|
|
| RvaVisitor* DisassemblerWin32::CreateAbs32TargetRvaVisitor() {
|
| @@ -439,6 +419,12 @@ void DisassemblerWin32::RemoveUnusedRel32Locations(
|
| rel32_locations_.end());
|
| }
|
|
|
| +InstructionGenerator DisassemblerWin32::GetInstructionGenerator(
|
| + AssemblyProgram* program) {
|
| + return base::Bind(&DisassemblerWin32::ParseFile, base::Unretained(this),
|
| + program);
|
| +}
|
| +
|
| CheckBool DisassemblerWin32::ParseFile(AssemblyProgram* program,
|
| InstructionReceptor* receptor) const {
|
| // Walk all the bytes in the file, whether or not in a section.
|
|
|