?
This document uses PHP Chinese website manual Release
import "debug/pe"
概述
索引
Package pe實現(xiàn)對 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 // 包含已過濾或未導(dǎo)出的字段}
func NewFile(r io.ReaderAt) (*File, error)
NewFile 創(chuàng)建一個新的文件,用于訪問底層閱讀器中的 PE 二進制文件。
func Open(name string) (*File, error)
打開使用 os.Open 打開命名文件,并準備將其用作 PE 二進制文件。
func (f *File) Close() error
關(guān)閉文件。如果文件是直接使用 NewFile 而不是 Open 來創(chuàng)建的,則 Close 不起作用。
func (f *File) DWARF() (*dwarf.Data, error)
func (f *File) ImportedLibraries() ([]string, error)
ImportedLibraries 返回二進制文件 f 引用的所有庫的名稱,這些庫在動態(tài)鏈接時期預(yù)計將與二進制文件鏈接。
func (f *File) ImportedSymbols() ([]string, error)
ImportedSymbols 返回二進制文件f引用的所有符號的名稱,動態(tài)加載時期望其他庫會滿足這些名稱。它不會返回弱符號。
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 // 包含已過濾或未導(dǎo)出的字段}
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 // 包含已過濾或未導(dǎo)出的字段}
func (s *Section) Data() ([]byte, error)
數(shù)據(jù)讀取并返回 PE 部分的內(nèi)容。
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}