| 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
|
|
|