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

#ifndef COURGETTE_DISASSEMBLER_WIN32_X64_H_
#define COURGETTE_DISASSEMBLER_WIN32_X64_H_

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

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

namespace courgette {

class AssemblyProgram;
class InstructionReceptor;

class DisassemblerWin32X64 : 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,
                                          kImageNtOptionalHdr64Magic);
  }

  DisassemblerWin32X64(const uint8_t* start, size_t length);
  ~DisassemblerWin32X64() override = default;

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

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

 protected:
  // DisassemblerWin32 interfaces.
  void ParseRel32RelocsFromSection(const Section* section) override;
  int AbsVAWidth() const override { return 8; }
  CheckBool EmitAbs(Label* label, InstructionReceptor* receptor) const override;
  bool SupportsRelTableType(int type) const override {
    return type == 10;  // IMAGE_REL_BASED_DIR64
  }
  uint16_t OffsetOfDataDirectories() const override {
    return kOffsetOfDataDirectoryFromImageOptionalHeader64;
  }

 private:
  DISALLOW_COPY_AND_ASSIGN(DisassemblerWin32X64);
};

}  // namespace courgette

#endif  // COURGETTE_DISASSEMBLER_WIN32_X64_H_
