blob: d44f37618cf590e6cbf1c2713156849256c4d310 [file] [log] [blame]
huangs8d5be252016-01-29 22:14:181// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COURGETTE_PROGRAM_DETECTOR_H_
6#define COURGETTE_PROGRAM_DETECTOR_H_
7
8#include <stddef.h>
etiennep5059bca2016-07-08 17:55:209#include <stdint.h>
huangs8d5be252016-01-29 22:14:1810
mostynb1007a4a2016-04-11 23:18:0611#include <memory>
12
huangs8d5be252016-01-29 22:14:1813#include "courgette/courgette.h"
14
15namespace courgette {
16
huangs88451332017-05-18 19:50:3417class Disassembler;
18
19// Returns a new instance of Disassembler inherited class if binary data given
20// in |buffer| and |length| match a known binary format, otherwise null.
21std::unique_ptr<Disassembler> DetectDisassembler(const uint8_t* buffer,
22 size_t length);
huangs8d5be252016-01-29 22:14:1823
24// Detects the type of an executable file, and it's length. The length may be
25// slightly smaller than some executables (like ELF), but will include all bytes
26// the courgette algorithm has special benefit for.
27// On success:
28// Fills in |type| and |detected_length|, and returns C_OK.
29// On failure:
30// Fills in |type| with UNKNOWN, |detected_length| with 0, and returns
31// C_INPUT_NOT_RECOGNIZED.
etiennep5059bca2016-07-08 17:55:2032Status DetectExecutableType(const uint8_t* buffer,
huangs8d5be252016-01-29 22:14:1833 size_t length,
34 ExecutableType* type,
35 size_t* detected_length);
36
huangs8d5be252016-01-29 22:14:1837} // namespace courgette
38
mostynb1007a4a2016-04-11 23:18:0639#endif // COURGETTE_PROGRAM_DETECTOR_H_