©
本文档使用
php中文网手册 发布
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}