- pe
- plan9obj
pe
程序包pe实现了对PE(Microsoft Windows Portable可执行文件)文件的访问。
Constants
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
type COFFSymbol
type COFFSymbol struct {
Name [8]uint8
Value uint32
SectionNumber int16
Type uint16
StorageClass uint8
NumberOfAuxSymbols uint8
}
COFFSymbol表示单个COFF符号表记录。
func (*COFFSymbol) FullName
func (sym *COFFSymbol) FullName(st StringTable) (string, error)
FullName查找符号sym的真实名称。 通常,名称存储在sym.Name中,但是如果名称长于8个字符,则将其存储在COFF字符串表st中。
type DataDirectory
type DataDirectory struct {
VirtualAddress uint32
Size uint32
}
type File
type File struct {
FileHeader
OptionalHeader interface{} // of type *OptionalHeader32 or *OptionalHeader64
Sections []*Section
Symbols []*Symbol // COFF symbols with auxiliary symbol records removed
COFFSymbols []COFFSymbol // all COFF symbols (including auxiliary symbol records)
StringTable StringTable
// contains filtered or unexported fields
}
文件代表打开的PE文件。
func NewFile
func NewFile(r io.ReaderAt) (*File, error)
NewFile创建一个新文件,用于访问基础读取器中的PE二进制文件。
func Open
func Open(name string) (*File, error)
Open使用os.Open打开命名文件,并准备将其用作PE二进制文件。
func (*File) Close
func (f *File) Close() error
Close关闭文件。 如果文件是使用NewFile而不是直接使用Open创建的,则Close无效。
func (*File) DWARF
func (f *File) DWARF() (*dwarf.Data, error)
func (*File) ImportedLibraries
func (f *File) ImportedLibraries() ([]string, error)
ImportedLibraries返回由二进制文件f引用的所有库的名称,这些库期望在动态链接时与二进制文件链接。
func (*File) ImportedSymbols
func (f *File) ImportedSymbols() ([]string, error)
ImportedSymbols返回二进制f引用的所有符号的名称,这些符号期望在动态加载时由其他库满足。 它不返回弱符号。
func (*File) Section
func (f *File) Section(name string) *Section
Section返回具有给定名称的第一部分;如果不存在这样的部分,则返回nil。
type FileHeader
type FileHeader struct {
Machine uint16
NumberOfSections uint16
TimeDateStamp uint32
PointerToSymbolTable uint32
NumberOfSymbols uint32
SizeOfOptionalHeader uint16
Characteristics uint16
}
type FormatError
type FormatError struct {
off int64
msg string
val interface{}
}
FormatError未使用。 保留该类型是为了兼容性。
func (*FormatError) Error
func (e *FormatError) Error() string
type ImportDirectory
type ImportDirectory struct {
OriginalFirstThunk uint32
TimeDateStamp uint32
ForwarderChain uint32
Name uint32
FirstThunk uint32
// contains filtered or unexported fields
}
type OptionalHeader32
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
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
}
type Reloc
type Reloc struct {
VirtualAddress uint32
SymbolTableIndex uint32
Type uint16
}
重定位表示PE COFF重定位。 每个部分包含其自己的重定位列表。
type Section
type Section struct {
SectionHeader
Relocs []Reloc
// Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly
// to avoid having Read and Seek.
// If a client wants Read and Seek it must use
// Open() to avoid fighting over the seek offset
// with other clients.
io.ReaderAt
// contains filtered or unexported fields
}
该部分提供对PE COFF部分的访问。
func (*Section) Data
func (s *Section) Data() ([]byte, error)
数据读取并返回PE部分s的内容。
func (*Section) Open
func (s *Section) Open() io.ReadSeeker
打开将返回一个新的ReadSeeker,其中将读取PE部分。
type SectionHeader
type SectionHeader struct {
Name string
VirtualSize uint32
VirtualAddress uint32
Size uint32
Offset uint32
PointerToRelocations uint32
PointerToLineNumbers uint32
NumberOfRelocations uint16
NumberOfLineNumbers uint16
Characteristics uint32
}
SectionHeader与SectionHeader32相似,其中Name字段被Go字符串替换。
type SectionHeader32
type SectionHeader32 struct {
Name [8]uint8
VirtualSize uint32
VirtualAddress uint32
SizeOfRawData uint32
PointerToRawData uint32
PointerToRelocations uint32
PointerToLineNumbers uint32
NumberOfRelocations uint16
NumberOfLineNumbers uint16
Characteristics uint32
}
SectionHeader32代表真实的PE COFF段头。
type StringTable
type StringTable []byte
StringTable是一个COFF字符串表。
func (StringTable) String
func (st StringTable) String(start uint32) (string, error)
字符串从偏移开始处的COFF字符串表st中提取字符串。
type Symbol
type Symbol struct {
Name string
Value uint32
SectionNumber int16
Type uint16
StorageClass uint8
}
符号类似于COFFSymbol,其中“名称”字段由Go字符串替换。 Symbol也没有NumberOfAuxSymbols。
plan9obj
程序包plan9obj实现对Plan 9 a.out对象文件的访问。
Constants
const (
Magic64 = 0x8000 // 64-bit expanded header
Magic386 = (4*11+0)*11 + 7
MagicAMD64 = (4*26+0)*26 + 7 + Magic64
MagicARM = (4*20+0)*20 + 7
)
type File
type File struct {
FileHeader
Sections []*Section
// contains filtered or unexported fields
}
文件代表打开的Plan 9 a.out文件。
func NewFile
func NewFile(r io.ReaderAt) (*File, error)
NewFile创建一个新文件,用于在基础读取器中访问Plan 9二进制文件。 计划9二进制文件应从ReaderAt的位置0开始。
func Open
func Open(name string) (*File, error)
Open使用os.Open打开命名文件,并准备将其用作Plan 9 a.out二进制文件。
func (*File) Close
func (f *File) Close() error
Close关闭文件。 如果文件是使用NewFile而不是直接使用Open创建的,则Close无效。
func (*File) Section
func (f *File) Section(name string) *Section
Section返回具有给定名称的部分,如果没有这样的部分,则返回nil。
func (*File) Symbols
func (f *File) Symbols() ([]Sym, error)
Symbols返回f的符号表。
type FileHeader
type FileHeader struct {
Magic uint32
Bss uint32
Entry uint64
PtrSize int
LoadAddress uint64
HdrSize uint64
}
FileHeader表示Plan 9 a.out文件头。
type Section
type Section struct {
SectionHeader
// Embed ReaderAt for ReadAt method.
// Do not embed SectionReader directly
// to avoid having Read and Seek.
// If a client wants Read and Seek it must use
// Open() to avoid fighting over the seek offset
// with other clients.
io.ReaderAt
// contains filtered or unexported fields
}
节代表Plan 9 a.out文件中的单个节。
func (*Section) Data
func (s *Section) Data() ([]byte, error)
数据读取并返回Plan 9 a.out部分的内容。
func (*Section) Open
func (s *Section) Open() io.ReadSeeker
打开将返回一个新的ReadSeeker,其中将读取Plan 9 a.out部分。
type SectionHeader
type SectionHeader struct {
Name string
Size uint32
Offset uint32
}
SectionHeader代表单个Plan 9 a.out节标题。 该结构在磁盘上不存在,但是可以简化在目标文件中的导航。
type Sym
type Sym struct {
Value uint64
Type rune
Name string
}
符号表示计划9 a.out符号表部分中的条目。
有疑问加站长微信联系(非本文作者)