// Copyright 2011 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COURGETTE_DISASSEMBLER_WIN32_X86_H_
#define COURGETTE_DISASSEMBLER_WIN32_X86_H_

#include <stddef.h>
#include <stdint.h>

#include "courgette/disassembler_win32.h"
#include "courgette/image_utils.h"
#include "courgette/types_win_pe.h"

namespace courgette {

class InstructionReceptor;

class DisassemblerWin32X86 : public DisassemblerWin32 {
 public:
  // Returns true if a valid executable is detected using only quick checks.
  static bool QuickDetect(const uint8_t* start, size_t length) {
    return DisassemblerWin32::QuickDetect(start, length,
                                          kImageNtOptionalHdr32Magic);
  }

  DisassemblerWin32X86(const uint8_t* start, size_t length);

  DisassemblerWin32X86(const DisassemblerWin32X86&) = delete;
  DisassemblerWin32X86& operator=(const DisassemblerWin32X86&) = delete;

  ~DisassemblerWin32X86() override = default;

  // Disassembler interfaces.
  RVA PointerToTargetRVA(const uint8_t* p) const override;
  ExecutableType kind() const override { return EXE_WIN_32_X86; }

  // (4) -> (5) (see AddressTranslator comment): Returns the RVA of the VA
  // specified by |address|, or kNoRVA if |address| lies outside of the image.
  RVA Address32ToRVA(uint32_t address) const;

 protected:
  // DisassemblerWin32 interfaces.
  void ParseRel32RelocsFromSection(const Section* section) override;
  int AbsVAWidth() const override { return 4; }
  CheckBool EmitAbs(Label* label, InstructionReceptor* receptor) const override;
  bool SupportsRelTableType(int type) const override {
    return type == 3;  // IMAGE_REL_BASED_HIGHLOW
  }
  uint16_t RelativeOffsetOfDataDirectories() const override {
    return kOffsetOfDataDirectoryFromImageOptionalHeader32;
  }
};

}  // namespace courgette

#endif  // COURGETTE_DISASSEMBLER_WIN32_X86_H_
