#ifndef COMPONENTS_ZUCCHINI_DISASSEMBLER_ELF_H_
#define COMPONENTS_ZUCCHINI_DISASSEMBLER_ELF_H_
#include <stdint.h>
#include <algorithm>
#include <deque>
#include <memory>
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "components/zucchini/address_translator.h"
#include "components/zucchini/buffer_view.h"
#include "components/zucchini/disassembler.h"
#include "components/zucchini/image_utils.h"
#include "components/zucchini/rel32_finder.h"
#include "components/zucchini/rel32_utils.h"
#include "components/zucchini/reloc_elf.h"
#include "components/zucchini/type_elf.h"
namespace zucchini {
struct ArmReferencePool { … };
struct AArch32ReferenceType { … };
struct AArch64ReferenceType { … };
struct Elf32Traits { … };
struct Elf32IntelTraits : public Elf32Traits { … };
struct ElfAArch32Traits : public Elf32Traits { … };
struct Elf64Traits { … };
struct Elf64IntelTraits : public Elf64Traits { … };
struct ElfAArch64Traits : public Elf64Traits { … };
template <class ELF_SHDR>
bool IsTargetOffsetInElfSectionList(
const std::vector<const ELF_SHDR*>& sorted_headers,
offset_t offset) { … }
template <class TRAITS>
class DisassemblerElf : public Disassembler { … };
template <class TRAITS>
class DisassemblerElfIntel : public DisassemblerElf<TRAITS> { … };
DisassemblerElfX86;
DisassemblerElfX64;
template <class TRAITS>
class DisassemblerElfArm : public DisassemblerElf<TRAITS> { … };
class DisassemblerElfAArch32 : public DisassemblerElfArm<ElfAArch32Traits> { … };
class DisassemblerElfAArch64 : public DisassemblerElfArm<ElfAArch64Traits> { … };
}
#endif