import "debug/pe"

PE(Microsoft Windows Portable Executable)ファイルへのアクセスを実装しています。

パッケージファイル

file.go pe.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
)

File型

Fileは、オープンしたPEファイルを表します。

type File struct {
    FileHeader
    Sections []*Section
    // contains unexported fields
}

NewFile関数

func NewFile(r io.ReaderAt) (*File, os.Error)

NewFileは、内部のReaderからPEバイナリへアクセスするFileを新たに作成して返します。

Open関数

func Open(name string) (*File, os.Error)

Openは、指定した名前のファイルをos.Openを使ってオープンし、PEバイナリとして扱う準備をします。

(*File) Close関数

func (f *File) Close() os.Error

Closeは、Fileをクローズします。このFileがOpenでなくNewFileによって直接作成されているときは、Closeは何もしません。

(*File) DWARF関数

func (f *File) DWARF() (*dwarf.Data, os.Error)

(*File) Section関数

func (f *File) Section(name string) *Section

Sectionは、指定した名前の最初のセクション、または該当するものがなければnilを返します。

FileHeader型

type FileHeader struct {
    Machine              uint16
    NumberOfSections     uint16
    TimeDateStamp        uint32
    PointerToSymbolTable uint32
    NumberOfSymbols      uint32
    SizeOfOptionalHeader uint16
    Characteristics      uint16
}

FormatError型

type FormatError struct {
    // contains unexported fields
}

(*FormatError) String関数

func (e *FormatError) String() string

Section型

type Section struct {
    SectionHeader

    // ReadAtメソッドのためにReaderAtを埋め込んでいます。
    // ReadとSeekを持たせないように、SectionReaderを
    // 直接埋め込まないでください。
    // クライアントがReadとSeekを必要とするときは、他の
    // クライアントとoffsetからのseekで競合することを
    // 避けるためOpen()を使わなくてはなりません。
    io.ReaderAt
    // contains unexported fields
}

(*Section) Data関数

func (s *Section) Data() ([]byte, os.Error)

Dataは、このPEセクションの内容を読み込んで返します。

(*Section) Open関数

func (s *Section) Open() io.ReadSeeker

Openは、このPEセクションを読み込む、新しいReadSeekerを返します。

SectionHeader型

type SectionHeader struct {
    Name                 string
    VirtualSize          uint32
    VirtualAddress       uint32
    Size                 uint32
    Offset               uint32
    PointerToRelocations uint32
    PointerToLineNumbers uint32
    NumberOfRelocations  uint16
    NumberOfLineNumbers  uint16
    Characteristics      uint32
}

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
}