Index: courgette/program_detector.cc |
diff --git a/courgette/program_detector.cc b/courgette/program_detector.cc |
index d67dc23fae88d66082beafc33887355473ccdac9..cc0f9ced237136c1ee36e998fd7b3936f95068d6 100644 |
--- a/courgette/program_detector.cc |
+++ b/courgette/program_detector.cc |
@@ -46,6 +46,27 @@ std::unique_ptr<Disassembler> DetectDisassembler(const uint8_t* buffer, |
return nullptr; |
} |
+Status ParseDetectedExecutableInternal( |
+ const uint8_t* buffer, |
+ size_t length, |
+ bool annotate_labels, |
+ std::unique_ptr<AssemblyProgram>* output) { |
+ output->reset(); |
+ |
+ std::unique_ptr<Disassembler> disassembler( |
+ DetectDisassembler(buffer, length)); |
+ if (!disassembler) |
+ return C_INPUT_NOT_RECOGNIZED; |
+ |
+ std::unique_ptr<AssemblyProgram> program = |
+ disassembler->Disassemble(annotate_labels); |
+ if (!program.get()) |
+ return C_DISASSEMBLY_FAILED; |
+ |
+ *output = std::move(program); |
+ return C_OK; |
+} |
+ |
} // namespace |
Status DetectExecutableType(const uint8_t* buffer, |
@@ -69,19 +90,14 @@ Status DetectExecutableType(const uint8_t* buffer, |
Status ParseDetectedExecutable(const uint8_t* buffer, |
size_t length, |
std::unique_ptr<AssemblyProgram>* output) { |
- output->reset(); |
- |
- std::unique_ptr<Disassembler> disassembler( |
- DetectDisassembler(buffer, length)); |
- if (!disassembler) |
- return C_INPUT_NOT_RECOGNIZED; |
- |
- std::unique_ptr<AssemblyProgram> program = disassembler->Disassemble(); |
- if (!program.get()) |
- return C_DISASSEMBLY_FAILED; |
+ return ParseDetectedExecutableInternal(buffer, length, false, output); |
+} |
- *output = std::move(program); |
- return C_OK; |
+Status ParseDetectedExecutableWithAnnotation( |
+ const uint8_t* buffer, |
+ size_t length, |
+ std::unique_ptr<AssemblyProgram>* output) { |
+ return ParseDetectedExecutableInternal(buffer, length, true, output); |
} |
} // namespace courgette |