type File … // Open opens the named file using [os.Open] and prepares it for use as a PE binary. func Open(name string) (*File, error) { … } // Close closes the [File]. // If the [File] was created using [NewFile] directly instead of [Open], // Close has no effect. func (f *File) Close() error { … } // NewFile creates a new [File] for accessing a PE binary in an underlying reader. func NewFile(r io.ReaderAt) (*File, error) { … } type nobitsSectionReader … func (*nobitsSectionReader) ReadAt(p []byte, off int64) (n int, err error) { … } // getString extracts a string from symbol string table. func getString(section []byte, start int) (string, bool) { … } // Section returns the first section with the given name, or nil if no such // section exists. func (f *File) Section(name string) *Section { … } func (f *File) DWARF() (*dwarf.Data, error) { … } type ImportDirectory … // 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. func (f *File) ImportedSymbols() ([]string, 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. func (f *File) ImportedLibraries() ([]string, error) { … } type FormatError … func (e *FormatError) Error() string { … } // readOptionalHeader accepts an io.ReadSeeker pointing to optional header in the PE file // and its size as seen in the file header. // It parses the given size of bytes and returns optional header. It infers whether the // bytes being parsed refer to 32 bit or 64 bit version of optional header. func readOptionalHeader(r io.ReadSeeker, sz uint16) (any, error) { … } // readDataDirectories accepts an io.ReadSeeker pointing to data directories in the PE file, // its size and number of data directories as seen in optional header. // It parses the given size of bytes and returns given number of data directories. func readDataDirectories(r io.ReadSeeker, sz uint16, n uint32) ([]DataDirectory, error) { … }