Index: courgette/program_detector.cc |
diff --git a/courgette/program_detector.cc b/courgette/program_detector.cc |
index 60b295fef7a82825c7e2f097c22c9fd55b87446c..71021cc3f7a397a78457609c223d7cd3e32cf88a 100644 |
--- a/courgette/program_detector.cc |
+++ b/courgette/program_detector.cc |
@@ -19,32 +19,36 @@ namespace { |
// Returns a new instance of Disassembler subclass if binary data given in |
// |buffer| and |length| matches a known binary format, otherwise null. |
-std::unique_ptr<Disassembler> DetectDisassembler(const void* buffer, |
+std::unique_ptr<Disassembler> DetectDisassembler(const uint8_t* buffer, |
size_t length) { |
std::unique_ptr<Disassembler> disassembler; |
- disassembler.reset(new DisassemblerWin32X86(buffer, length)); |
- if (disassembler->ParseHeader()) |
- return disassembler; |
- |
- disassembler.reset(new DisassemblerWin32X64(buffer, length)); |
- if (disassembler->ParseHeader()) |
- return disassembler; |
- |
- disassembler.reset(new DisassemblerElf32X86(buffer, length)); |
- if (disassembler->ParseHeader()) |
- return disassembler; |
- |
- disassembler.reset(new DisassemblerElf32ARM(buffer, length)); |
- if (disassembler->ParseHeader()) |
- return disassembler; |
- |
+ if (DisassemblerWin32X86::QuickDetect(buffer, length)) { |
+ disassembler.reset(new DisassemblerWin32X86(buffer, length)); |
+ if (disassembler->ParseHeader()) |
+ return disassembler; |
+ } |
+ if (DisassemblerWin32X64::QuickDetect(buffer, length)) { |
+ disassembler.reset(new DisassemblerWin32X64(buffer, length)); |
+ if (disassembler->ParseHeader()) |
+ return disassembler; |
+ } |
+ if (DisassemblerElf32X86::QuickDetect(buffer, length)) { |
+ disassembler.reset(new DisassemblerElf32X86(buffer, length)); |
+ if (disassembler->ParseHeader()) |
+ return disassembler; |
+ } |
+ if (DisassemblerElf32ARM::QuickDetect(buffer, length)) { |
+ disassembler.reset(new DisassemblerElf32ARM(buffer, length)); |
+ if (disassembler->ParseHeader()) |
+ return disassembler; |
+ } |
return nullptr; |
} |
} // namespace |
-Status DetectExecutableType(const void* buffer, |
+Status DetectExecutableType(const uint8_t* buffer, |
size_t length, |
ExecutableType* type, |
size_t* detected_length) { |
@@ -62,7 +66,7 @@ Status DetectExecutableType(const void* buffer, |
return C_OK; |
} |
-Status ParseDetectedExecutable(const void* buffer, |
+Status ParseDetectedExecutable(const uint8_t* buffer, |
size_t length, |
std::unique_ptr<AssemblyProgram>* output) { |
output->reset(); |