Documentation
¶
Overview ¶
peパッケージは、PE(Microsoft Windows Portable Executable)ファイルへのアクセスを実装します。
セキュリティ ¶
このパッケージは、敵対的な入力に対して強化されるように設計されていませんし、 https://go.dev/security/policy の範囲外です。特に、オブジェクトファイルを解析する際には基本的な 検証のみが行われます。そのため、信頼できない入力を解析する際には注意が必要です。なぜなら、 形式が不正なファイルを解析すると、大量のリソースを消費したり、パニックを引き起こす可能性があるからです。
Index ¶
- Constants
- type COFFSymbol
- type COFFSymbolAuxFormat5
- type DataDirectory
- type File
- func (f *File) COFFSymbolReadSectionDefAux(idx int) (*COFFSymbolAuxFormat5, 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
- type ImportDirectory
- type OptionalHeader32
- type OptionalHeader64
- type Reloc
- type Section
- type SectionHeader
- type SectionHeader32
- type StringTable
- type Symbol
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_ARMNT = 0x1c4 IMAGE_FILE_MACHINE_ARM64 = 0xaa64 IMAGE_FILE_MACHINE_EBC = 0xebc IMAGE_FILE_MACHINE_I386 = 0x14c IMAGE_FILE_MACHINE_IA64 = 0x200 IMAGE_FILE_MACHINE_LOONGARCH32 = 0x6232 IMAGE_FILE_MACHINE_LOONGARCH64 = 0x6264 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 IMAGE_FILE_MACHINE_RISCV32 = 0x5032 IMAGE_FILE_MACHINE_RISCV64 = 0x5064 IMAGE_FILE_MACHINE_RISCV128 = 0x5128 )
const ( IMAGE_DIRECTORY_ENTRY_EXPORT = 0 IMAGE_DIRECTORY_ENTRY_IMPORT = 1 IMAGE_DIRECTORY_ENTRY_RESOURCE = 2 IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3 IMAGE_DIRECTORY_ENTRY_SECURITY = 4 IMAGE_DIRECTORY_ENTRY_BASERELOC = 5 IMAGE_DIRECTORY_ENTRY_DEBUG = 6 IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7 IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8 IMAGE_DIRECTORY_ENTRY_TLS = 9 IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11 IMAGE_DIRECTORY_ENTRY_IAT = 12 IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13 IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14 )
IMAGE_DIRECTORY_ENTRY 定数
const ( IMAGE_FILE_RELOCS_STRIPPED = 0x0001 IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002 IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004 IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008 IMAGE_FILE_AGGRESIVE_WS_TRIM = 0x0010 IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020 IMAGE_FILE_BYTES_REVERSED_LO = 0x0080 IMAGE_FILE_32BIT_MACHINE = 0x0100 IMAGE_FILE_DEBUG_STRIPPED = 0x0200 IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400 IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800 IMAGE_FILE_SYSTEM = 0x1000 IMAGE_FILE_DLL = 0x2000 IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000 IMAGE_FILE_BYTES_REVERSED_HI = 0x8000 )
IMAGE_FILE_HEADER.Characteristicsの値。これらは組み合わせることができます。
const ( IMAGE_SUBSYSTEM_UNKNOWN = 0 IMAGE_SUBSYSTEM_NATIVE = 1 IMAGE_SUBSYSTEM_WINDOWS_GUI = 2 IMAGE_SUBSYSTEM_WINDOWS_CUI = 3 IMAGE_SUBSYSTEM_OS2_CUI = 5 IMAGE_SUBSYSTEM_POSIX_CUI = 7 IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8 IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9 IMAGE_SUBSYSTEM_EFI_APPLICATION = 10 IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11 IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12 IMAGE_SUBSYSTEM_EFI_ROM = 13 IMAGE_SUBSYSTEM_XBOX = 14 IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16 )
OptionalHeader64.SubsystemとOptionalHeader32.Subsystemの値。
const ( IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = 0x0080 IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100 IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200 IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400 IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800 IMAGE_DLLCHARACTERISTICS_APPCONTAINER = 0x1000 IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000 IMAGE_DLLCHARACTERISTICS_GUARD_CF = 0x4000 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000 )
OptionalHeader64.DllCharacteristicsとOptionalHeader32.DllCharacteristicsの値。 これらは組み合わせることができます。
const ( IMAGE_SCN_CNT_CODE = 0x00000020 IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040 IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080 IMAGE_SCN_LNK_COMDAT = 0x00001000 IMAGE_SCN_MEM_DISCARDABLE = 0x02000000 IMAGE_SCN_MEM_EXECUTE = 0x20000000 IMAGE_SCN_MEM_READ = 0x40000000 IMAGE_SCN_MEM_WRITE = 0x80000000 )
セクション特性フラグ。
const ( IMAGE_COMDAT_SELECT_NODUPLICATES = 1 IMAGE_COMDAT_SELECT_ANY = 2 IMAGE_COMDAT_SELECT_SAME_SIZE = 3 IMAGE_COMDAT_SELECT_EXACT_MATCH = 4 IMAGE_COMDAT_SELECT_ASSOCIATIVE = 5 IMAGE_COMDAT_SELECT_LARGEST = 6 )
これらの定数は、AuxFormat5の 'Selection' フィールドの可能な値を構成します。
const COFFSymbolSize = 18
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type COFFSymbol ¶ added in v1.1.0
type COFFSymbol struct { Name [8]uint8 Value uint32 SectionNumber int16 Type uint16 StorageClass uint8 NumberOfAuxSymbols uint8 }
COFFSymbolは、単一のCOFFシンボルテーブルレコードを表します。
func (*COFFSymbol) FullName ¶ added in v1.8.0
func (sym *COFFSymbol) FullName(st StringTable) (string, error)
FullNameは、シンボルsymの実際の名前を見つけます。通常、名前は sym.Nameに格納されますが、それが8文字より長い場合、代わりに COFF文字列テーブルstに格納されます。
type COFFSymbolAuxFormat5 ¶ added in v1.19.0
type COFFSymbolAuxFormat5 struct { Size uint32 NumRelocs uint16 NumLineNumbers uint16 Checksum uint32 SecNum uint16 Selection uint8 // contains filtered or unexported fields }
COFFSymbolAuxFormat5は、セクション定義シンボルに付随するauxシンボルの予想される形式を説明します。 PEフォーマットは、関数定義のためのフォーマット1、.beおよび.efシンボルのためのフォーマット2など、 いくつかの異なるauxシンボルフォーマットを定義します。フォーマット5は、セクション定義に関連する追加情報を保持し、 再配置の数+行番号、およびCOMDAT情報を含みます。ここで何が起こっているのかについての詳細は、 https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#auxiliary-format-5-section-definitions を参照してください。
type DataDirectory ¶ added in v1.3.0
type File ¶
type File struct { FileHeader OptionalHeader any Sections []*Section Symbols []*Symbol COFFSymbols []COFFSymbol StringTable StringTable // contains filtered or unexported fields }
Fileは、開かれたPEファイルを表します。
func (*File) COFFSymbolReadSectionDefAux ¶ added in v1.19.0
func (f *File) COFFSymbolReadSectionDefAux(idx int) (*COFFSymbolAuxFormat5, error)
COFFSymbolReadSectionDefAuxは、セクション定義シンボルの補助情報 (COMDAT情報を含む)のブロブを返します。ここで 'idx' は、 Fileの主要な COFFSymbol 配列内のセクションシンボルのインデックスです。 戻り値は、適切なauxシンボル構造体へのポインタです。詳細については、以下を参照してください:
補助シンボル: https://docs.microsoft.com/ja-jp/windows/win32/debug/pe-format#auxiliary-symbol-records COMDATセクション: https://docs.microsoft.com/ja-jp/windows/win32/debug/pe-format#comdat-sections-object-only セクション定義の補助情報: https://docs.microsoft.com/ja-jp/windows/win32/debug/pe-format#auxiliary-format-5-section-definitions
func (*File) ImportedLibraries ¶
ImportedLibrariesは、動的リンク時にバイナリとリンクされることが期待されている、 バイナリfが参照しているすべてのライブラリの名前を返します。
func (*File) ImportedSymbols ¶
ImportedSymbolsは、動的ロード時に他のライブラリによって満たされることが期待されている、 バイナリfが参照しているすべてのシンボルの名前を返します。 それは弱いシンボルを返しません。
type FileHeader ¶
type FormatError ¶
type FormatError struct { }
FormatErrorは使用されていません。 この型は互換性のために保持されています。
func (*FormatError) Error ¶
func (e *FormatError) Error() string
type ImportDirectory ¶
type OptionalHeader32 ¶ added in v1.3.0
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 ¶ added in v1.3.0
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 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 }
Sectionは、PE COFFセクションへのアクセスを提供します。
func (*Section) Data ¶
Dataは、PEセクションsの内容を読み取り、返します。
s.Offsetが0の場合、セクションには内容がなく、 Dataは常に非nilのエラーを返します。
func (*Section) Open ¶
func (s *Section) Open() io.ReadSeeker
Openは、PEセクションsを読み取る新しいReadSeekerを返します。
s.Offsetが0の場合、セクションには内容がなく、 返されたリーダーへのすべての呼び出しは非nilのエラーを返します。
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は、NameフィールドがGoの文字列に置き換えられた SectionHeader32 と似ています。
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セクションヘッダーを表します。