©
Ce document utilise Manuel du site Web PHP chinois Libérer
import "debug/pe"
概述
索引
Package pe实现对 PE(Microsoft Windows Portable Executable)文件的访问。
常量
type COFFSymbol
func (sym *COFFSymbol) FullName(st StringTable) (string, error)
type DataDirectory
type File
func NewFile(r io.ReaderAt) (*File, error)
func Open(name string) (*File, error)
func (f *File) Close() error
func (f *File) DWARF() (*dwarf.Data, error)
func (f *File) ImportedLibraries() ([]string, error)
func (f *File) ImportedSymbols() ([]string, error)
func (f *File) Section(name string) *Section
type FileHeader
type FormatError
func (e *FormatError) Error() string
type ImportDirectory
type OptionalHeader32
type OptionalHeader64
type Reloc
type Section
func (s *Section) Data() ([]byte, error)
func (s *Section) Open() io.ReadSeeker
type SectionHeader
type SectionHeader32
type StringTable
func (st StringTable) String(start uint32) (string, error)
type Symbol
file.go pe.go section.go string.go symbol.go
const ( IMAGE_FILE_MACHINE_UNKNOWN = 0x0 IMAGE_FILE_MACHINE_AM33 = 0x1d3 IMAGE_FILE_MACHINE_AMD64 = 0x8664 IMAGE_FILE_MACHINE_ARM = 0x1c0 IMAGE_FILE_MACHINE_EBC = 0xebc IMAGE_FILE_MACHINE_I386 = 0x14c IMAGE_FILE_MACHINE_IA64 = 0x200 IMAGE_FILE_MACHINE_M32R = 0x9041 IMAGE_FILE_MACHINE_MIPS16 = 0x266 IMAGE_FILE_MACHINE_MIPSFPU = 0x366 IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466 IMAGE_FILE_MACHINE_POWERPC = 0x1f0 IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1 IMAGE_FILE_MACHINE_R4000 = 0x166 IMAGE_FILE_MACHINE_SH3 = 0x1a2 IMAGE_FILE_MACHINE_SH3DSP = 0x1a3 IMAGE_FILE_MACHINE_SH4 = 0x1a6 IMAGE_FILE_MACHINE_SH5 = 0x1a8 IMAGE_FILE_MACHINE_THUMB = 0x1c2 IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169)
const COFFSymbolSize = 18
COFFSymbol 表示单个 COFF 符号表记录。
type COFFSymbol struct { Name [8]uint8 Value uint32 SectionNumber int16 Type uint16 StorageClass uint8 NumberOfAuxSymbols uint8}
func (sym *COFFSymbol) FullName(st StringTable) (string, error)
FullName 找到符号 sym 的真实名称。通常名称存储在 sym.Name 中,但如果长度超过8个字符,它将存储在 COFF 字符串表st中。
type DataDirectory struct { VirtualAddress uint32 Size uint32}
文件表示一个开放的 PE 文件。
type File struct { FileHeader OptionalHeader interface{} // *OptionalHeader32或 *OptionalHeader64 类型 Sections []*Section Symbols []*Symbol // 删除了辅助符号记录的COFF符号 COFFSymbols []COFFSymbol // 所有COFF符号(包括辅助符号记录) StringTable StringTable // 包含已过滤或未导出的字段}
func NewFile(r io.ReaderAt) (*File, error)
NewFile 创建一个新的文件,用于访问底层阅读器中的 PE 二进制文件。
func Open(name string) (*File, error)
打开使用 os.Open 打开命名文件,并准备将其用作 PE 二进制文件。
func (f *File) Close() error
关闭文件。如果文件是直接使用 NewFile 而不是 Open 来创建的,则 Close 不起作用。
func (f *File) DWARF() (*dwarf.Data, error)
func (f *File) ImportedLibraries() ([]string, error)
ImportedLibraries 返回二进制文件 f 引用的所有库的名称,这些库在动态链接时期预计将与二进制文件链接。
func (f *File) ImportedSymbols() ([]string, error)
ImportedSymbols 返回二进制文件f引用的所有符号的名称,动态加载时期望其他库会满足这些名称。它不会返回弱符号。
func (f *File) Section(name string) *Section
Section 返回给定名称的第一部分,如果不存在这样的部分,则返回 nil。
type FileHeader struct { Machine uint16 NumberOfSections uint16 TimeDateStamp uint32 PointerToSymbolTable uint32 NumberOfSymbols uint32 SizeOfOptionalHeader uint16 Characteristics uint16}
FormatError 未使用。该类型被保留以便兼容。
type FormatError struct {}
func (e *FormatError) Error() string
type ImportDirectory struct { OriginalFirstThunk uint32 TimeDateStamp uint32 ForwarderChain uint32 Name uint32 FirstThunk uint32 // 包含已过滤或未导出的字段}
type OptionalHeader32 struct { Magic uint16 MajorLinkerVersion uint8 MinorLinkerVersion uint8 SizeOfCode uint32 SizeOfInitializedData uint32 SizeOfUninitializedData uint32 AddressOfEntryPoint uint32 BaseOfCode uint32 BaseOfData uint32 ImageBase uint32 SectionAlignment uint32 FileAlignment uint32 MajorOperatingSystemVersion uint16 MinorOperatingSystemVersion uint16 MajorImageVersion uint16 MinorImageVersion uint16 MajorSubsystemVersion uint16 MinorSubsystemVersion uint16 Win32VersionValue uint32 SizeOfImage uint32 SizeOfHeaders uint32 CheckSum uint32 Subsystem uint16 DllCharacteristics uint16 SizeOfStackReserve uint32 SizeOfStackCommit uint32 SizeOfHeapReserve uint32 SizeOfHeapCommit uint32 LoaderFlags uint32 NumberOfRvaAndSizes uint32 DataDirectory [16]DataDirectory}
type OptionalHeader64 struct { Magic uint16 MajorLinkerVersion uint8 MinorLinkerVersion uint8 SizeOfCode uint32 SizeOfInitializedData uint32 SizeOfUninitializedData uint32 AddressOfEntryPoint uint32 BaseOfCode uint32 ImageBase uint64 SectionAlignment uint32 FileAlignment uint32 MajorOperatingSystemVersion uint16 MinorOperatingSystemVersion uint16 MajorImageVersion uint16 MinorImageVersion uint16 MajorSubsystemVersion uint16 MinorSubsystemVersion uint16 Win32VersionValue uint32 SizeOfImage uint32 SizeOfHeaders uint32 CheckSum uint32 Subsystem uint16 DllCharacteristics uint16 SizeOfStackReserve uint64 SizeOfStackCommit uint64 SizeOfHeapReserve uint64 SizeOfHeapCommit uint64 LoaderFlags uint32 NumberOfRvaAndSizes uint32 DataDirectory [16]DataDirectory}
Reloc 代表 PE COFF 重新安置。每个部分都包含自己的重定位列表。
type Reloc struct { VirtualAddress uint32 SymbolTableIndex uint32 Type uint16}
部分提供对 PE COFF 部分的访问。
type Section struct { SectionHeader Relocs []Reloc // 为ReadAt方法嵌入ReaderAt。 // 不要直接嵌入SectionReader // 避免阅读Read和寻求Seek。 // 如果客户想要阅读和寻求它必须使用 // Open()以避免争夺搜索偏移量 // 与其他客户。 io.ReaderAt // 包含已过滤或未导出的字段}
func (s *Section) Data() ([]byte, error)
数据读取并返回 PE 部分的内容。
func (s *Section) Open() io.ReadSeeker
Open 返回一个新的 ReadSeeker 读取 PE 部分。
SectionHeader 类似于 SectionHeader32,其中 Name 字段被 Go 字符串替换。
type SectionHeader struct { Name string VirtualSize uint32 VirtualAddress uint32 Size uint32 Offset uint32 PointerToRelocations uint32 PointerToLineNumbers uint32 NumberOfRelocations uint16 NumberOfLineNumbers uint16 Characteristics uint32}
SectionHeader32 表示真实的 PE COFF 部分标题。
type SectionHeader32 struct { Name [8]uint8 VirtualSize uint32 VirtualAddress uint32 SizeOfRawData uint32 PointerToRawData uint32 PointerToRelocations uint32 PointerToLineNumbers uint32 NumberOfRelocations uint16 NumberOfLineNumbers uint16 Characteristics uint32}
StringTable 是一个 COFF 字符串表。
type StringTable []byte
func (st StringTable) String(start uint32) (string, error)
字符串从偏移量开始处的 COFF 字符串表st中提取字符串。
符号与 COFFSymbol 类似,名称字段由 Go 字符串替换。Symbol 也没有 NumberOfAuxSymbols。
type Symbol struct { Name string Value uint32 SectionNumber int16 Type uint16 StorageClass uint8}