// Generated by Lisette bindgen
// Source: debug/pe (Go stdlib)
// Go: 1.25.5
// Lisette: 0.1.14
import "go:debug/dwarf"
import "go:io"
pub fn NewFile(r: io.ReaderAt) -> Result<Ref<File>, error>
pub fn Open(name: string) -> Result<Ref<File>, error>
/// COFFSymbol represents single COFF symbol table record.
pub struct COFFSymbol {
pub Name: Slice<uint8>,
pub Value: uint32,
pub SectionNumber: int16,
pub Type: uint16,
pub StorageClass: uint8,
pub NumberOfAuxSymbols: uint8,
}
/// COFFSymbolAuxFormat5 describes the expected form of an aux symbol
/// attached to a section definition symbol. The PE format defines a
/// number of different aux symbol formats: format 1 for function
/// definitions, format 2 for .be and .ef symbols, and so on. Format 5
/// holds extra info associated with a section definition, including
/// number of relocations + line numbers, as well as COMDAT info. See
/// https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#auxiliary-format-5-section-definitions
/// for more on what's going on here.
pub struct COFFSymbolAuxFormat5 {
pub Size: uint32,
pub NumRelocs: uint16,
pub NumLineNumbers: uint16,
pub Checksum: uint32,
pub SecNum: uint16,
pub Selection: uint8,
}
pub struct DataDirectory {
pub VirtualAddress: uint32,
pub Size: uint32,
}
/// A File represents an open PE file.
pub struct File {
pub FileHeader: FileHeader,
pub OptionalHeader: Unknown,
pub Sections: Slice<Option<Ref<Section>>>,
pub Symbols: Slice<Option<Ref<Symbol>>>,
pub COFFSymbols: Slice<COFFSymbol>,
pub StringTable: StringTable,
}
pub struct FileHeader {
pub Machine: uint16,
pub NumberOfSections: uint16,
pub TimeDateStamp: uint32,
pub PointerToSymbolTable: uint32,
pub NumberOfSymbols: uint32,
pub SizeOfOptionalHeader: uint16,
pub Characteristics: uint16,
}
/// FormatError is unused.
/// The type is retained for compatibility.
pub type FormatError
pub struct ImportDirectory {
pub OriginalFirstThunk: uint32,
pub TimeDateStamp: uint32,
pub ForwarderChain: uint32,
pub Name: uint32,
pub FirstThunk: uint32,
}
pub struct OptionalHeader32 {
pub Magic: uint16,
pub MajorLinkerVersion: uint8,
pub MinorLinkerVersion: uint8,
pub SizeOfCode: uint32,
pub SizeOfInitializedData: uint32,
pub SizeOfUninitializedData: uint32,
pub AddressOfEntryPoint: uint32,
pub BaseOfCode: uint32,
pub BaseOfData: uint32,
pub ImageBase: uint32,
pub SectionAlignment: uint32,
pub FileAlignment: uint32,
pub MajorOperatingSystemVersion: uint16,
pub MinorOperatingSystemVersion: uint16,
pub MajorImageVersion: uint16,
pub MinorImageVersion: uint16,
pub MajorSubsystemVersion: uint16,
pub MinorSubsystemVersion: uint16,
pub Win32VersionValue: uint32,
pub SizeOfImage: uint32,
pub SizeOfHeaders: uint32,
pub CheckSum: uint32,
pub Subsystem: uint16,
pub DllCharacteristics: uint16,
pub SizeOfStackReserve: uint32,
pub SizeOfStackCommit: uint32,
pub SizeOfHeapReserve: uint32,
pub SizeOfHeapCommit: uint32,
pub LoaderFlags: uint32,
pub NumberOfRvaAndSizes: uint32,
pub DataDirectory: Slice<DataDirectory>,
}
pub struct OptionalHeader64 {
pub Magic: uint16,
pub MajorLinkerVersion: uint8,
pub MinorLinkerVersion: uint8,
pub SizeOfCode: uint32,
pub SizeOfInitializedData: uint32,
pub SizeOfUninitializedData: uint32,
pub AddressOfEntryPoint: uint32,
pub BaseOfCode: uint32,
pub ImageBase: uint64,
pub SectionAlignment: uint32,
pub FileAlignment: uint32,
pub MajorOperatingSystemVersion: uint16,
pub MinorOperatingSystemVersion: uint16,
pub MajorImageVersion: uint16,
pub MinorImageVersion: uint16,
pub MajorSubsystemVersion: uint16,
pub MinorSubsystemVersion: uint16,
pub Win32VersionValue: uint32,
pub SizeOfImage: uint32,
pub SizeOfHeaders: uint32,
pub CheckSum: uint32,
pub Subsystem: uint16,
pub DllCharacteristics: uint16,
pub SizeOfStackReserve: uint64,
pub SizeOfStackCommit: uint64,
pub SizeOfHeapReserve: uint64,
pub SizeOfHeapCommit: uint64,
pub LoaderFlags: uint32,
pub NumberOfRvaAndSizes: uint32,
pub DataDirectory: Slice<DataDirectory>,
}
/// Reloc represents a PE COFF relocation.
/// Each section contains its own relocation list.
pub struct Reloc {
pub VirtualAddress: uint32,
pub SymbolTableIndex: uint32,
pub Type: uint16,
}
/// Section provides access to PE COFF section.
pub struct Section {
pub SectionHeader: SectionHeader,
pub Relocs: Slice<Reloc>,
pub ReaderAt: Option<io.ReaderAt>,
}
/// SectionHeader is similar to [SectionHeader32] with Name
/// field replaced by Go string.
pub struct SectionHeader {
pub Name: string,
pub VirtualSize: uint32,
pub VirtualAddress: uint32,
pub Size: uint32,
pub Offset: uint32,
pub PointerToRelocations: uint32,
pub PointerToLineNumbers: uint32,
pub NumberOfRelocations: uint16,
pub NumberOfLineNumbers: uint16,
pub Characteristics: uint32,
}
/// SectionHeader32 represents real PE COFF section header.
pub struct SectionHeader32 {
pub Name: Slice<uint8>,
pub VirtualSize: uint32,
pub VirtualAddress: uint32,
pub SizeOfRawData: uint32,
pub PointerToRawData: uint32,
pub PointerToRelocations: uint32,
pub PointerToLineNumbers: uint32,
pub NumberOfRelocations: uint16,
pub NumberOfLineNumbers: uint16,
pub Characteristics: uint32,
}
/// StringTable is a COFF string table.
pub struct StringTable(Slice<uint8>)
/// Symbol is similar to [COFFSymbol] with Name field replaced
/// by Go string. Symbol also does not have NumberOfAuxSymbols.
pub struct Symbol {
pub Name: string,
pub Value: uint32,
pub SectionNumber: int16,
pub Type: uint16,
pub StorageClass: uint8,
}
const COFFSymbolSize = 18
/// These constants make up the possible values for the 'Selection'
/// field in an AuxFormat5.
const IMAGE_COMDAT_SELECT_ANY = 2
/// These constants make up the possible values for the 'Selection'
/// field in an AuxFormat5.
const IMAGE_COMDAT_SELECT_ASSOCIATIVE = 5
/// These constants make up the possible values for the 'Selection'
/// field in an AuxFormat5.
const IMAGE_COMDAT_SELECT_EXACT_MATCH = 4
/// These constants make up the possible values for the 'Selection'
/// field in an AuxFormat5.
const IMAGE_COMDAT_SELECT_LARGEST = 6
/// These constants make up the possible values for the 'Selection'
/// field in an AuxFormat5.
const IMAGE_COMDAT_SELECT_NODUPLICATES = 1
/// These constants make up the possible values for the 'Selection'
/// field in an AuxFormat5.
const IMAGE_COMDAT_SELECT_SAME_SIZE = 3
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_BASERELOC = 5
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_DEBUG = 6
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_EXPORT = 0
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_IAT = 12
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_IMPORT = 1
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_SECURITY = 4
/// IMAGE_DIRECTORY_ENTRY constants
const IMAGE_DIRECTORY_ENTRY_TLS = 9
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_APPCONTAINER = 0x1000
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = 0x0080
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_GUARD_CF = 0x4000
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
/// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
/// values. These can be combined together.
const IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_32BIT_MACHINE = 0x0100
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_AGGRESIVE_WS_TRIM = 0x0010
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_BYTES_REVERSED_LO = 0x0080
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_DEBUG_STRIPPED = 0x0200
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_DLL = 0x2000
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008
const IMAGE_FILE_MACHINE_AM33 = 0x1d3
const IMAGE_FILE_MACHINE_AMD64 = 0x8664
const IMAGE_FILE_MACHINE_ARM = 0x1c0
const IMAGE_FILE_MACHINE_ARM64 = 0xaa64
const IMAGE_FILE_MACHINE_ARMNT = 0x1c4
const IMAGE_FILE_MACHINE_EBC = 0xebc
const IMAGE_FILE_MACHINE_I386 = 0x14c
const IMAGE_FILE_MACHINE_IA64 = 0x200
const IMAGE_FILE_MACHINE_LOONGARCH32 = 0x6232
const IMAGE_FILE_MACHINE_LOONGARCH64 = 0x6264
const IMAGE_FILE_MACHINE_M32R = 0x9041
const IMAGE_FILE_MACHINE_MIPS16 = 0x266
const IMAGE_FILE_MACHINE_MIPSFPU = 0x366
const IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466
const IMAGE_FILE_MACHINE_POWERPC = 0x1f0
const IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1
const IMAGE_FILE_MACHINE_R4000 = 0x166
const IMAGE_FILE_MACHINE_RISCV128 = 0x5128
const IMAGE_FILE_MACHINE_RISCV32 = 0x5032
const IMAGE_FILE_MACHINE_RISCV64 = 0x5064
const IMAGE_FILE_MACHINE_SH3 = 0x1a2
const IMAGE_FILE_MACHINE_SH3DSP = 0x1a3
const IMAGE_FILE_MACHINE_SH4 = 0x1a6
const IMAGE_FILE_MACHINE_SH5 = 0x1a8
const IMAGE_FILE_MACHINE_THUMB = 0x1c2
const IMAGE_FILE_MACHINE_UNKNOWN = 0x0
const IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_RELOCS_STRIPPED = 0x0001
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_SYSTEM = 0x1000
/// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
const IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000
/// Section characteristics flags.
const IMAGE_SCN_CNT_CODE = 0x00000020
/// Section characteristics flags.
const IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
/// Section characteristics flags.
const IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
/// Section characteristics flags.
const IMAGE_SCN_LNK_COMDAT = 0x00001000
/// Section characteristics flags.
const IMAGE_SCN_MEM_DISCARDABLE = 0x02000000
/// Section characteristics flags.
const IMAGE_SCN_MEM_EXECUTE = 0x20000000
/// Section characteristics flags.
const IMAGE_SCN_MEM_READ = 0x40000000
/// Section characteristics flags.
const IMAGE_SCN_MEM_WRITE = 0x80000000
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_EFI_APPLICATION = 10
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_EFI_ROM = 13
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_NATIVE = 1
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_OS2_CUI = 5
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_POSIX_CUI = 7
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_UNKNOWN = 0
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_WINDOWS_CUI = 3
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
/// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
const IMAGE_SUBSYSTEM_XBOX = 14
impl COFFSymbol {
/// FullName finds real name of symbol sym. Normally name is stored
/// in sym.Name, but if it is longer then 8 characters, it is stored
/// in COFF string table st instead.
fn FullName(self: Ref<COFFSymbol>, st: StringTable) -> Result<string, error>
}
impl File {
/// COFFSymbolReadSectionDefAux returns a blob of auxiliary information
/// (including COMDAT info) for a section definition symbol. Here 'idx'
/// is the index of a section symbol in the main [COFFSymbol] array for
/// the File. Return value is a pointer to the appropriate aux symbol
/// struct. For more info, see:
///
/// auxiliary symbols: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#auxiliary-symbol-records
/// COMDAT sections: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#comdat-sections-object-only
/// auxiliary info for section definitions: https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#auxiliary-format-5-section-definitions
fn COFFSymbolReadSectionDefAux(self: Ref<File>, idx: int) -> Result<Ref<COFFSymbolAuxFormat5>, error>
/// Close closes the [File].
/// If the [File] was created using [NewFile] directly instead of [Open],
/// Close has no effect.
#[allow(unused_result)]
fn Close(self: Ref<File>) -> Result<(), error>
fn DWARF(self: Ref<File>) -> Result<Ref<dwarf.Data>, error>
/// ImportedLibraries returns the names of all libraries
/// referred to by the binary f that are expected to be
/// linked with the binary at dynamic link time.
fn ImportedLibraries(self: Ref<File>) -> Result<Slice<string>, error>
/// ImportedSymbols returns the names of all symbols
/// referred to by the binary f that are expected to be
/// satisfied by other libraries at dynamic load time.
/// It does not return weak symbols.
fn ImportedSymbols(self: Ref<File>) -> Result<Slice<string>, error>
/// Section returns the first section with the given name, or nil if no such
/// section exists.
fn Section(self: Ref<File>, name: string) -> Option<Ref<Section>>
}
impl FormatError {
fn Error(self: Ref<FormatError>) -> string
}
impl Section {
/// Data reads and returns the contents of the PE section s.
///
/// If s.Offset is 0, the section has no contents,
/// and Data will always return a non-nil error.
fn Data(self: Ref<Section>) -> Result<Slice<uint8>, error>
/// Open returns a new ReadSeeker reading the PE section s.
///
/// If s.Offset is 0, the section has no contents, and all calls
/// to the returned reader will return a non-nil error.
fn Open(self: Ref<Section>) -> io.ReadSeeker
fn ReadAt(self, mut p: Slice<uint8>, off: int64) -> Partial<int, error>
}
impl StringTable {
/// String extracts string from COFF string table st at offset start.
fn String(self, start: uint32) -> Result<string, error>
}