import "debug/elf"
ELFオブジェクトファイルへのアクセスを実装しています。
パッケージファイル
elf.go file.go
定数
Header.Ident配列へのインデックスです。
const (
EI_CLASS = 4 /* マシンクラス */
EI_DATA = 5 /* データフォーマット */
EI_VERSION = 6 /* ELFフォーマットバージョン */
EI_OSABI = 7 /* OS / ABI識別 */
EI_ABIVERSION = 8 /* ABIバージョン */
EI_PAD = 9 /* パディングの開始(per SVR4 ABI) */
EI_NIDENT = 16 /* e_ident配列のサイズ */
)
ELFトランポリンのマジックナンバー
const ARM_MAGIC_TRAMP_NUMBER = 0x5c000003
ELFファイルの初期マジックナンバー
const ELFMAG = "\177ELF" const Sym32Size = 16 const Sym64Size = 24
R_INFO関数
func R_INFO(sym, typ uint32) uint64
R_INFO32関数
func R_INFO32(sym, typ uint32) uint32
R_SYM32関数
func R_SYM32(info uint32) uint32
R_SYM64関数
func R_SYM64(info uint64) uint32
R_TYPE32関数
func R_TYPE32(info uint32) uint32
R_TYPE64関数
func R_TYPE64(info uint64) uint32
ST_TYPE関数
func ST_TYPE(bind SymBind, typ SymType) uint8
Class型
Classは、Header.Ident[EI_CLASS]とHeader.Classで使用されています。
type Class byte
const (
ELFCLASSNONE Class = 0 /* 不明クラス */
ELFCLASS32 Class = 1 /* 32ビットアーキテクチャ */
ELFCLASS64 Class = 2 /* 64ビットアーキテクチャ */
)
(Class) GoString関数
func (i Class) GoString() string
(Class) String関数
func (i Class) String() string
Data型
Dataは、Header.Ident[EI_DATA]とHeader.Dataで使用されています。
type Data byte
const (
ELFDATANONE Data = 0 /* 不明なデータフォーマット */
ELFDATA2LSB Data = 1 /* 2の補数(リトルエンディアン) */
ELFDATA2MSB Data = 2 /* 2の補数(ビッグエンディアン) */
)
(Data) GoString関数
func (i Data) GoString() string
(Data) String関数
func (i Data) String() string
Dyn32型
ELF32動的構造体。”.dynamic”セクションにこれらの配列が含まれています。
type Dyn32 struct {
Tag int32 /* Entry type. */
Val uint32 /* Integer/Address value. */
}
Dyn64型
ELF64動的構造体。”.dynamic”セクションにこれらの配列が含まれています。
type Dyn64 struct {
Tag int64 /* Entry type. */
Val uint64 /* Integer/address value */
}
DynFlag型
DT_FLAGSの値。
type DynFlag int
const (
DF_ORIGIN DynFlag = 0x0001 /* ロードされるオブジェクトが$ORIGIN置換文字列を参照する
かもしれないことを示す */
DF_SYMBOLIC DynFlag = 0x0002 /* シンボリックリンクを示す */
DF_TEXTREL DynFlag = 0x0004 /* 書き込み不可なセグメントに再配置するかもしれないことを
示す */
DF_BIND_NOW DynFlag = 0x0008 /* 動的リンカがプログラムに制御を移す前にエントリを含む全
てのオブジェクトの再配置処理をしなければならないことを
示す */
DF_STATIC_TLS DynFlag = 0x0010 /* 共有オブジェクトまたは実行可能コードは静的なスレッドロ
ーカルストレージのスキームを使用していることを示す */
)
(DynFlag) GoString関数
func (i DynFlag) GoString() string
(DynFlag) String関数
func (i DynFlag) String() string
DynTag型
Dyn.Tag
type DynTag int
const (
DT_NULL DynTag = 0 /* エントリの終端 */
DT_NEEDED DynTag = 1 /* 共有ライブラリに必要な文字列テーブルオフセット */
DT_PLTRELSZ DynTag = 2 /* PLT再配置のバイト単位での合計サイズ */
DT_PLTGOT DynTag = 3 /* プロセッサ依存アドレス */
DT_HASH DynTag = 4 /* シンボルハッシュテーブルのアドレス */
DT_STRTAB DynTag = 5 /* 文字列テーブルのアドレス */
DT_SYMTAB DynTag = 6 /* シンボルテーブルのアドレス */
DT_RELA DynTag = 7 /* ElfNN_Rela再配置のアドレス */
DT_RELASZ DynTag = 8 /* ElfNN_Rela再配置の合計サイズ */
DT_RELAENT DynTag = 9 /* 各ElfNN_Rela再配置エントリのサイズ */
DT_STRSZ DynTag = 10 /* 文字列テーブルのサイズ */
DT_SYMENT DynTag = 11 /* 各シンボルテーブルエントリのサイズ */
DT_INIT DynTag = 12 /* 初期化関数のアドレス */
DT_FINI DynTag = 13 /* 終了関数のアドレス */
DT_SONAME DynTag = 14 /* 共有オブジェクト名の文字列テーブルオフセット */
DT_RPATH DynTag = 15 /* ライブラリパスの文字列テーブルオフセット(sup) */
DT_SYMBOLIC DynTag = 16 /* シンボリックリンクを示す(sup) */
DT_REL DynTag = 17 /* ElfNN_Rel再配置のアドレス */
DT_RELSZ DynTag = 18 /* ElfNN_Rel再配置の合計サイズ */
DT_RELENT DynTag = 19 /* 各ElfNN_Rel再配置のサイズ */
DT_PLTREL DynTag = 20 /* PLTで使用されている再配置のタイプ */
DT_DEBUG DynTag = 21 /* 予約されています(使用できません) */
DT_TEXTREL DynTag = 22 /* 書き込み不可能なセグメントに再配置するかもしれないこと
を示す(sup) */
DT_JMPREL DynTag = 23 /* PLT再配置のアドレス */
DT_BIND_NOW DynTag = 24 /* (sup) */
DT_INIT_ARRAY DynTag = 25 /* 初期化関数へのポインタ配列のアドレス */
DT_FINI_ARRAY DynTag = 26 /* 終了関数へのポインタ配列のアドレス */
DT_INIT_ARRAYSZ DynTag = 27 /* 初期化関数のバイト単位での配列サイズ */
DT_FINI_ARRAYSZ DynTag = 28 /* 終了関数のバイト単位での配列サイズ */
DT_RUNPATH DynTag = 29 /* nullで終了しているライブラリ検索パス文字列の文字列テー
ブルオフセット */
DT_FLAGS DynTag = 30 /* 特定のフラグ値のオブジェクト */
DT_ENCODING DynTag = 32 /* DT_ENCODINGと等しいかそれより大きく、且つDT_LOOSと等し
いかそれより小さい値は、d_un共用体の解釈の規則に従いま
す。 */
DT_PREINIT_ARRAY DynTag = 32 /* 初期化前関数へのポインタ配列のアドレス */
DT_PREINIT_ARRAYSZ DynTag = 33 /* 初期化前関数のバイト単位でのサイズ */
DT_LOOS DynTag = 0x6000000d /* OS固有値(From) */
DT_HIOS DynTag = 0x6ffff000 /* OS固有値(To) */
DT_LOPROC DynTag = 0x70000000 /* プロセッサ固有値(From) */
DT_HIPROC DynTag = 0x7fffffff /* プロセッサ固有値(To) */
)
(DynTag) GoString関数
func (i DynTag) GoString() string
(DynTag) String関数
func (i DynTag) String() string
File型
FileはELFファイルを表します。
type File struct {
FileHeader
Sections []*Section
Progs []*Prog
// contains unexported fields
}
NewFile関数
func NewFile(r io.ReaderAt) (*File, os.Error)
NewFileは、内部リーダでELFバイナリへアクセスするFileを作成します。ELFバイナリの読み込み開始位置が0となっている必要があります。
Open関数
func Open(name string) (*File, os.Error)
Openは、指定されたファイル名をos.Openで開きます。またELFバイナリとして使用するための準備をします。
(*File) Close関数
func (f *File) Close() os.Error
Closeは、ファイルを閉じます。FileがOpenではなく、NewFileを使用して直接作成された場合はCloseは機能しません。
(*File) DWARF関数
func (f *File) DWARF() (*dwarf.Data, os.Error)
(*File) Section関数
func (f *File) Section(name string) *Section
Sectionは、指定されたnameに該当するセクションを返します。該当するセクションが存在しない場合はnilを返します。
FileHeader型
FileHeaderはELFファイルヘッダを表します。
type FileHeader struct {
Class Class
Data Data
Version Version
OSABI OSABI
ABIVersion uint8
ByteOrder binary.ByteOrder
Type Type
Machine Machine
}
FormatError型
type FormatError struct {
// contains unexported fields
}
(*FormatError) String関数
func (e *FormatError) String() string
Header32型
ELF32ファイルヘッダ。
type Header32 struct {
Ident [EI_NIDENT]byte /* ファイル識別 */
Type uint16 /* ファイルタイプ */
Machine uint16 /* マシンアーキテクチャ */
Version uint32 /* ELFフォーマットバージョン */
Entry uint32 /* エントリポイント */
Phoff uint32 /* プログラムヘッダファイルオフセット */
Shoff uint32 /* セクションヘッダファイルオフセット */
Flags uint32 /* アーキテクチャ固有フラグ */
Ehsize uint16 /* バイト単位でのELFヘッダサイズ */
Phentsize uint16 /* プログラムヘッダエントリサイズ */
Phnum uint16 /* プログラムヘッダエントリ数 */
Shentsize uint16 /* セクションヘッダエントリサイズ */
Shnum uint16 /* セクションヘッダエントリ数 */
Shstrndx uint16 /* セクション名文字列 */
}
Header64型
ELF64ファイルヘッダ。
type Header64 struct {
Ident [EI_NIDENT]byte /* ファイル識別 */
Type uint16 /* ファイルタイプ */
Machine uint16 /* マシンアーキテクチャ */
Version uint32 /* ELFフォーマットバージョン */
Entry uint64 /* エントリポイント */
Phoff uint64 /* プログラムヘッダファイルオフセット */
Shoff uint64 /* セクションヘッダファイルオフセット */
Flags uint32 /* アーキテクチャ固有フラグ */
Ehsize uint16 /* バイト単位でのELFヘッダサイズ */
Phentsize uint16 /* プログラムヘッダエントリサイズ */
Phnum uint16 /* プログラムヘッダエントリ数 */
Shentsize uint16 /* セクションヘッダエントリサイズ */
Shnum uint16 /* セクションヘッダエントリ数 */
Shstrndx uint16 /* セクション名文字列 */
}
Machine型
Machineは、Header.Machineで使用されています。
type Machine uint16
const (
EM_NONE Machine = 0 /* Unknown machine. */
EM_M32 Machine = 1 /* AT&T WE32100. */
EM_SPARC Machine = 2 /* Sun SPARC. */
EM_386 Machine = 3 /* Intel i386. */
EM_68K Machine = 4 /* Motorola 68000. */
EM_88K Machine = 5 /* Motorola 88000. */
EM_860 Machine = 7 /* Intel i860. */
EM_MIPS Machine = 8 /* MIPS R3000 Big-Endian only. */
EM_S370 Machine = 9 /* IBM System/370. */
EM_MIPS_RS3_LE Machine = 10 /* MIPS R3000 Little-Endian. */
EM_PARISC Machine = 15 /* HP PA-RISC. */
EM_VPP500 Machine = 17 /* Fujitsu VPP500. */
EM_SPARC32PLUS Machine = 18 /* SPARC v8plus. */
EM_960 Machine = 19 /* Intel 80960. */
EM_PPC Machine = 20 /* PowerPC 32-bit. */
EM_PPC64 Machine = 21 /* PowerPC 64-bit. */
EM_S390 Machine = 22 /* IBM System/390. */
EM_V800 Machine = 36 /* NEC V800. */
EM_FR20 Machine = 37 /* Fujitsu FR20. */
EM_RH32 Machine = 38 /* TRW RH-32. */
EM_RCE Machine = 39 /* Motorola RCE. */
EM_ARM Machine = 40 /* ARM. */
EM_SH Machine = 42 /* Hitachi SH. */
EM_SPARCV9 Machine = 43 /* SPARC v9 64-bit. */
EM_TRICORE Machine = 44 /* Siemens TriCore embedded processor. */
EM_ARC Machine = 45 /* Argonaut RISC Core. */
EM_H8_300 Machine = 46 /* Hitachi H8/300. */
EM_H8_300H Machine = 47 /* Hitachi H8/300H. */
EM_H8S Machine = 48 /* Hitachi H8S. */
EM_H8_500 Machine = 49 /* Hitachi H8/500. */
EM_IA_64 Machine = 50 /* Intel IA-64 Processor. */
EM_MIPS_X Machine = 51 /* Stanford MIPS-X. */
EM_COLDFIRE Machine = 52 /* Motorola ColdFire. */
EM_68HC12 Machine = 53 /* Motorola M68HC12. */
EM_MMA Machine = 54 /* Fujitsu MMA. */
EM_PCP Machine = 55 /* Siemens PCP. */
EM_NCPU Machine = 56 /* Sony nCPU. */
EM_NDR1 Machine = 57 /* Denso NDR1 microprocessor. */
EM_STARCORE Machine = 58 /* Motorola Star*Core processor. */
EM_ME16 Machine = 59 /* Toyota ME16 processor. */
EM_ST100 Machine = 60 /* STMicroelectronics ST100 processor. */
EM_TINYJ Machine = 61 /* Advanced Logic Corp. TinyJ processor. */
EM_X86_64 Machine = 62 /* Advanced Micro Devices x86-64 */
/* 非標準または非推奨 */
EM_486 Machine = 6 /* Intel i486. */
EM_MIPS_RS4_BE Machine = 10 /* MIPS R4000 Big-Endian */
EM_ALPHA_STD Machine = 41 /* Digital Alpha (standard value). */
EM_ALPHA Machine = 0x9026 /* Alpha (written in the absence of an ABI) */
)
(Machine) GoString関数
func (i Machine) GoString() string
(Machine) String関数
func (i Machine) String() string
NType型
NTypeの値。(コアファイルで使用)
type NType int
const (
NT_PRSTATUS NType = 1 /* プロセスステータス */
NT_FPREGSET NType = 2 /* 浮動小数点レジスタ */
NT_PRPSINFO NType = 3 /* プロセス状態情報 */
)
(NType) GoString関数
func (i NType) GoString() string
(NType) String関数
func (i NType) String() string
OSABI型
OSABIはHeader.Ident[EI_OSABI]とHeader.OSABIで使用されています。
type OSABI byte
const (
ELFOSABI_NONE OSABI = 0 /* UNIX System V ABI */
ELFOSABI_HPUX OSABI = 1 /* HP-UX operating system */
ELFOSABI_NETBSD OSABI = 2 /* NetBSD */
ELFOSABI_LINUX OSABI = 3 /* GNU/Linux */
ELFOSABI_HURD OSABI = 4 /* GNU/Hurd */
ELFOSABI_86OPEN OSABI = 5 /* 86Open common IA32 ABI */
ELFOSABI_SOLARIS OSABI = 6 /* Solaris */
ELFOSABI_AIX OSABI = 7 /* AIX */
ELFOSABI_IRIX OSABI = 8 /* IRIX */
ELFOSABI_FREEBSD OSABI = 9 /* FreeBSD */
ELFOSABI_TRU64 OSABI = 10 /* TRU64 UNIX */
ELFOSABI_MODESTO OSABI = 11 /* Novell Modesto */
ELFOSABI_OPENBSD OSABI = 12 /* OpenBSD */
ELFOSABI_OPENVMS OSABI = 13 /* Open VMS */
ELFOSABI_NSK OSABI = 14 /* HP Non-Stop Kernel */
ELFOSABI_ARM OSABI = 97 /* ARM */
ELFOSABI_STANDALONE OSABI = 255 /* Standalone (embedded) application */
)
(OSABI) GoString関数
func (i OSABI) GoString() string
(OSABI) String関数
func (i OSABI) String() string
Prog型
ProgはELFバイナリの単一ELFプログラムヘッダを表します。
type Prog struct {
ProgHeader
// 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 unexported fields
}
(*Prog) Open関数
func (p *Prog) Open() io.ReadSeeker
Openは、ELFプログラム本体を読み込むReadSeekerを返します。
Prog32型
ELF32プログラムヘッダ。
type Prog32 struct {
Type uint32 /* エントリタイプ */
Off uint32 /* コンテンツのファイルオフセット */
Vaddr uint32 /* メモリイメージの仮想アドレス */
Paddr uint32 /* 物理アドレス(使用できません) */
Filesz uint32 /* ファイルのコンテンツサイズ */
Memsz uint32 /* メモリのコンテンツサイズ */
Flags uint32 /* アクセス許可フラグ */
Align uint32 /* メモリとファイルの調整 */
}
Prog64型
ELF64プログラムヘッダ。
type Prog64 struct {
Type uint32 /* エントリタイプ */
Flags uint32 /* アクセス許可フラグ */
Off uint64 /* コンテンツのファイルオフセット */
Vaddr uint64 /* メモリイメージの仮想アドレス */
Paddr uint64 /* 物理アドレス(使用できません) */
Filesz uint64 /* ファイルのコンテンツサイズ */
Memsz uint64 /* メモリのコンテンツサイズ */
Align uint64 /* メモリとファイルの調整 */
}
ProgFlag型
Prog.Flag。
type ProgFlag uint32
const (
PF_X ProgFlag = 0x1 /* 実行可能 */
PF_W ProgFlag = 0x2 /* 書き込み可能 */
PF_R ProgFlag = 0x4 /* 読み込み可能 */
PF_MASKOS ProgFlag = 0x0ff00000 /* OS固有 */
PF_MASKPROC ProgFlag = 0xf0000000 /* プロセッサ固有 */
)
(ProgFlag) GoString関数
func (i ProgFlag) GoString() string
(ProgFlag) String関数
func (i ProgFlag) String() string
ProgHeader型
ProgHeaderは、単一ELFプログラムヘッダを表します。
type ProgHeader struct {
Type ProgType
Flags ProgFlag
Vaddr uint64
Paddr uint64
Filesz uint64
Memsz uint64
Align uint64
}
ProgType型
Prog.Type。
type ProgType int
const (
PT_NULL ProgType = 0 /* 未使用エントリ */
PT_LOAD ProgType = 1 /* ロード可能なセグメント */
PT_DYNAMIC ProgType = 2 /* 動的リンク情報セグメント */
PT_INTERP ProgType = 3 /* パス名解釈 */
PT_NOTE ProgType = 4 /* 予備情報 */
PT_SHLIB ProgType = 5 /* 予約されています(使用できません) */
PT_PHDR ProgType = 6 /* プログラムヘッダ自体のロケーション */
PT_TLS ProgType = 7 /* スレッドローカルストレージセグメント */
PT_LOOS ProgType = 0x60000000 /* OS固有値(From) */
PT_HIOS ProgType = 0x6fffffff /* OS固有値(To) */
PT_LOPROC ProgType = 0x70000000 /* プロセッサ固有値(From) */
PT_HIPROC ProgType = 0x7fffffff /* プロセッサ固有値(To) */
)
(ProgType) GoString関数
func (i ProgType) GoString() string
(ProgType) String関数
func (i ProgType) String() string
R_386型
386の再配置型。
type R_386 int
const (
R_386_NONE R_386 = 0 /* No relocation. */
R_386_32 R_386 = 1 /* Add symbol value. */
R_386_PC32 R_386 = 2 /* Add PC-relative symbol value. */
R_386_GOT32 R_386 = 3 /* Add PC-relative GOT offset. */
R_386_PLT32 R_386 = 4 /* Add PC-relative PLT offset. */
R_386_COPY R_386 = 5 /* Copy data from shared object. */
R_386_GLOB_DAT R_386 = 6 /* Set GOT entry to data address. */
R_386_JMP_SLOT R_386 = 7 /* Set GOT entry to code address. */
R_386_RELATIVE R_386 = 8 /* Add load address of shared object. */
R_386_GOTOFF R_386 = 9 /* Add GOT-relative symbol address. */
R_386_GOTPC R_386 = 10 /* Add PC-relative GOT table address. */
R_386_TLS_TPOFF R_386 = 14 /* Negative offset in static TLS block */
R_386_TLS_IE R_386 = 15 /* Absolute address of GOT for -ve static TLS */
R_386_TLS_GOTIE R_386 = 16 /* GOT entry for negative static TLS block */
R_386_TLS_LE R_386 = 17 /* Negative offset relative to static TLS */
R_386_TLS_GD R_386 = 18 /* 32 bit offset to GOT (index,off) pair */
R_386_TLS_LDM R_386 = 19 /* 32 bit offset to GOT (index,zero) pair */
R_386_TLS_GD_32 R_386 = 24 /* 32 bit offset to GOT (index,off) pair */
R_386_TLS_GD_PUSH R_386 = 25 /* pushl instruction for Sun ABI GD sequence */
R_386_TLS_GD_CALL R_386 = 26 /* call instruction for Sun ABI GD sequence */
R_386_TLS_GD_POP R_386 = 27 /* popl instruction for Sun ABI GD sequence */
R_386_TLS_LDM_32 R_386 = 28 /* 32 bit offset to GOT (index,zero) pair */
R_386_TLS_LDM_PUSH R_386 = 29 /* pushl instruction for Sun ABI LD sequence */
R_386_TLS_LDM_CALL R_386 = 30 /* call instruction for Sun ABI LD sequence */
R_386_TLS_LDM_POP R_386 = 31 /* popl instruction for Sun ABI LD sequence */
R_386_TLS_LDO_32 R_386 = 32 /* 32 bit offset from start of TLS block */
R_386_TLS_IE_32 R_386 = 33 /* 32 bit offset to GOT static TLS offset entry */
R_386_TLS_LE_32 R_386 = 34 /* 32 bit offset within static TLS block */
R_386_TLS_DTPMOD32 R_386 = 35 /* GOT entry containing TLS index */
R_386_TLS_DTPOFF32 R_386 = 36 /* GOT entry containing TLS offset */
R_386_TLS_TPOFF32 R_386 = 37 /* GOT entry of -ve static TLS offset */
)
(R_386) GoString関数
func (i R_386) GoString() string
(R_386) String関数
func (i R_386) String() string
R_ALPHA型
Alphaの再配置型。
type R_ALPHA int
const (
R_ALPHA_NONE R_ALPHA = 0 /* No reloc */
R_ALPHA_REFLONG R_ALPHA = 1 /* Direct 32 bit */
R_ALPHA_REFQUAD R_ALPHA = 2 /* Direct 64 bit */
R_ALPHA_GPREL32 R_ALPHA = 3 /* GP relative 32 bit */
R_ALPHA_LITERAL R_ALPHA = 4 /* GP relative 16 bit w/optimization */
R_ALPHA_LITUSE R_ALPHA = 5 /* Optimization hint for LITERAL */
R_ALPHA_GPDISP R_ALPHA = 6 /* Add displacement to GP */
R_ALPHA_BRADDR R_ALPHA = 7 /* PC+4 relative 23 bit shifted */
R_ALPHA_HINT R_ALPHA = 8 /* PC+4 relative 16 bit shifted */
R_ALPHA_SREL16 R_ALPHA = 9 /* PC relative 16 bit */
R_ALPHA_SREL32 R_ALPHA = 10 /* PC relative 32 bit */
R_ALPHA_SREL64 R_ALPHA = 11 /* PC relative 64 bit */
R_ALPHA_OP_PUSH R_ALPHA = 12 /* OP stack push */
R_ALPHA_OP_STORE R_ALPHA = 13 /* OP stack pop and store */
R_ALPHA_OP_PSUB R_ALPHA = 14 /* OP stack subtract */
R_ALPHA_OP_PRSHIFT R_ALPHA = 15 /* OP stack right shift */
R_ALPHA_GPVALUE R_ALPHA = 16
R_ALPHA_GPRELHIGH R_ALPHA = 17
R_ALPHA_GPRELLOW R_ALPHA = 18
R_ALPHA_IMMED_GP_16 R_ALPHA = 19
R_ALPHA_IMMED_GP_HI32 R_ALPHA = 20
R_ALPHA_IMMED_SCN_HI32 R_ALPHA = 21
R_ALPHA_IMMED_BR_HI32 R_ALPHA = 22
R_ALPHA_IMMED_LO32 R_ALPHA = 23
R_ALPHA_COPY R_ALPHA = 24 /* Copy symbol at runtime */
R_ALPHA_GLOB_DAT R_ALPHA = 25 /* Create GOT entry */
R_ALPHA_JMP_SLOT R_ALPHA = 26 /* Create PLT entry */
R_ALPHA_RELATIVE R_ALPHA = 27 /* Adjust by program base */
)
(R_ALPHA) GoString関数
func (i R_ALPHA) GoString() string
(R_ALPHA) String関数
func (i R_ALPHA) String() string
R_ARM型
ARMの再配置型。
type R_ARM int
const (
R_ARM_NONE R_ARM = 0 /* No relocation. */
R_ARM_PC24 R_ARM = 1
R_ARM_ABS32 R_ARM = 2
R_ARM_REL32 R_ARM = 3
R_ARM_PC13 R_ARM = 4
R_ARM_ABS16 R_ARM = 5
R_ARM_ABS12 R_ARM = 6
R_ARM_THM_ABS5 R_ARM = 7
R_ARM_ABS8 R_ARM = 8
R_ARM_SBREL32 R_ARM = 9
R_ARM_THM_PC22 R_ARM = 10
R_ARM_THM_PC8 R_ARM = 11
R_ARM_AMP_VCALL9 R_ARM = 12
R_ARM_SWI24 R_ARM = 13
R_ARM_THM_SWI8 R_ARM = 14
R_ARM_XPC25 R_ARM = 15
R_ARM_THM_XPC22 R_ARM = 16
R_ARM_COPY R_ARM = 20 /* Copy data from shared object. */
R_ARM_GLOB_DAT R_ARM = 21 /* Set GOT entry to data address. */
R_ARM_JUMP_SLOT R_ARM = 22 /* Set GOT entry to code address. */
R_ARM_RELATIVE R_ARM = 23 /* Add load address of shared object. */
R_ARM_GOTOFF R_ARM = 24 /* Add GOT-relative symbol address. */
R_ARM_GOTPC R_ARM = 25 /* Add PC-relative GOT table address. */
R_ARM_GOT32 R_ARM = 26 /* Add PC-relative GOT offset. */
R_ARM_PLT32 R_ARM = 27 /* Add PC-relative PLT offset. */
R_ARM_GNU_VTENTRY R_ARM = 100
R_ARM_GNU_VTINHERIT R_ARM = 101
R_ARM_RSBREL32 R_ARM = 250
R_ARM_THM_RPC22 R_ARM = 251
R_ARM_RREL32 R_ARM = 252
R_ARM_RABS32 R_ARM = 253
R_ARM_RPC24 R_ARM = 254
R_ARM_RBASE R_ARM = 255
)
(R_ARM) GoString関数
func (i R_ARM) GoString() string
(R_ARM) String関数
func (i R_ARM) String() string
R_PPC型
PowerPCの再配置型。
type R_PPC int
const (
R_PPC_NONE R_PPC = 0 /* No relocation. */
R_PPC_ADDR32 R_PPC = 1
R_PPC_ADDR24 R_PPC = 2
R_PPC_ADDR16 R_PPC = 3
R_PPC_ADDR16_LO R_PPC = 4
R_PPC_ADDR16_HI R_PPC = 5
R_PPC_ADDR16_HA R_PPC = 6
R_PPC_ADDR14 R_PPC = 7
R_PPC_ADDR14_BRTAKEN R_PPC = 8
R_PPC_ADDR14_BRNTAKEN R_PPC = 9
R_PPC_REL24 R_PPC = 10
R_PPC_REL14 R_PPC = 11
R_PPC_REL14_BRTAKEN R_PPC = 12
R_PPC_REL14_BRNTAKEN R_PPC = 13
R_PPC_GOT16 R_PPC = 14
R_PPC_GOT16_LO R_PPC = 15
R_PPC_GOT16_HI R_PPC = 16
R_PPC_GOT16_HA R_PPC = 17
R_PPC_PLTREL24 R_PPC = 18
R_PPC_COPY R_PPC = 19
R_PPC_GLOB_DAT R_PPC = 20
R_PPC_JMP_SLOT R_PPC = 21
R_PPC_RELATIVE R_PPC = 22
R_PPC_LOCAL24PC R_PPC = 23
R_PPC_UADDR32 R_PPC = 24
R_PPC_UADDR16 R_PPC = 25
R_PPC_REL32 R_PPC = 26
R_PPC_PLT32 R_PPC = 27
R_PPC_PLTREL32 R_PPC = 28
R_PPC_PLT16_LO R_PPC = 29
R_PPC_PLT16_HI R_PPC = 30
R_PPC_PLT16_HA R_PPC = 31
R_PPC_SDAREL16 R_PPC = 32
R_PPC_SECTOFF R_PPC = 33
R_PPC_SECTOFF_LO R_PPC = 34
R_PPC_SECTOFF_HI R_PPC = 35
R_PPC_SECTOFF_HA R_PPC = 36
R_PPC_TLS R_PPC = 67
R_PPC_DTPMOD32 R_PPC = 68
R_PPC_TPREL16 R_PPC = 69
R_PPC_TPREL16_LO R_PPC = 70
R_PPC_TPREL16_HI R_PPC = 71
R_PPC_TPREL16_HA R_PPC = 72
R_PPC_TPREL32 R_PPC = 73
R_PPC_DTPREL16 R_PPC = 74
R_PPC_DTPREL16_LO R_PPC = 75
R_PPC_DTPREL16_HI R_PPC = 76
R_PPC_DTPREL16_HA R_PPC = 77
R_PPC_DTPREL32 R_PPC = 78
R_PPC_GOT_TLSGD16 R_PPC = 79
R_PPC_GOT_TLSGD16_LO R_PPC = 80
R_PPC_GOT_TLSGD16_HI R_PPC = 81
R_PPC_GOT_TLSGD16_HA R_PPC = 82
R_PPC_GOT_TLSLD16 R_PPC = 83
R_PPC_GOT_TLSLD16_LO R_PPC = 84
R_PPC_GOT_TLSLD16_HI R_PPC = 85
R_PPC_GOT_TLSLD16_HA R_PPC = 86
R_PPC_GOT_TPREL16 R_PPC = 87
R_PPC_GOT_TPREL16_LO R_PPC = 88
R_PPC_GOT_TPREL16_HI R_PPC = 89
R_PPC_GOT_TPREL16_HA R_PPC = 90
R_PPC_EMB_NADDR32 R_PPC = 101
R_PPC_EMB_NADDR16 R_PPC = 102
R_PPC_EMB_NADDR16_LO R_PPC = 103
R_PPC_EMB_NADDR16_HI R_PPC = 104
R_PPC_EMB_NADDR16_HA R_PPC = 105
R_PPC_EMB_SDAI16 R_PPC = 106
R_PPC_EMB_SDA2I16 R_PPC = 107
R_PPC_EMB_SDA2REL R_PPC = 108
R_PPC_EMB_SDA21 R_PPC = 109
R_PPC_EMB_MRKREF R_PPC = 110
R_PPC_EMB_RELSEC16 R_PPC = 111
R_PPC_EMB_RELST_LO R_PPC = 112
R_PPC_EMB_RELST_HI R_PPC = 113
R_PPC_EMB_RELST_HA R_PPC = 114
R_PPC_EMB_BIT_FLD R_PPC = 115
R_PPC_EMB_RELSDA R_PPC = 116
)
(R_PPC) GoString関数
func (i R_PPC) GoString() string
(R_PPC) String関数
func (i R_PPC) String() string
R_SPARC型
SPARCの再配置型。
type R_SPARC int
const (
R_SPARC_NONE R_SPARC = 0
R_SPARC_8 R_SPARC = 1
R_SPARC_16 R_SPARC = 2
R_SPARC_32 R_SPARC = 3
R_SPARC_DISP8 R_SPARC = 4
R_SPARC_DISP16 R_SPARC = 5
R_SPARC_DISP32 R_SPARC = 6
R_SPARC_WDISP30 R_SPARC = 7
R_SPARC_WDISP22 R_SPARC = 8
R_SPARC_HI22 R_SPARC = 9
R_SPARC_22 R_SPARC = 10
R_SPARC_13 R_SPARC = 11
R_SPARC_LO10 R_SPARC = 12
R_SPARC_GOT10 R_SPARC = 13
R_SPARC_GOT13 R_SPARC = 14
R_SPARC_GOT22 R_SPARC = 15
R_SPARC_PC10 R_SPARC = 16
R_SPARC_PC22 R_SPARC = 17
R_SPARC_WPLT30 R_SPARC = 18
R_SPARC_COPY R_SPARC = 19
R_SPARC_GLOB_DAT R_SPARC = 20
R_SPARC_JMP_SLOT R_SPARC = 21
R_SPARC_RELATIVE R_SPARC = 22
R_SPARC_UA32 R_SPARC = 23
R_SPARC_PLT32 R_SPARC = 24
R_SPARC_HIPLT22 R_SPARC = 25
R_SPARC_LOPLT10 R_SPARC = 26
R_SPARC_PCPLT32 R_SPARC = 27
R_SPARC_PCPLT22 R_SPARC = 28
R_SPARC_PCPLT10 R_SPARC = 29
R_SPARC_10 R_SPARC = 30
R_SPARC_11 R_SPARC = 31
R_SPARC_64 R_SPARC = 32
R_SPARC_OLO10 R_SPARC = 33
R_SPARC_HH22 R_SPARC = 34
R_SPARC_HM10 R_SPARC = 35
R_SPARC_LM22 R_SPARC = 36
R_SPARC_PC_HH22 R_SPARC = 37
R_SPARC_PC_HM10 R_SPARC = 38
R_SPARC_PC_LM22 R_SPARC = 39
R_SPARC_WDISP16 R_SPARC = 40
R_SPARC_WDISP19 R_SPARC = 41
R_SPARC_GLOB_JMP R_SPARC = 42
R_SPARC_7 R_SPARC = 43
R_SPARC_5 R_SPARC = 44
R_SPARC_6 R_SPARC = 45
R_SPARC_DISP64 R_SPARC = 46
R_SPARC_PLT64 R_SPARC = 47
R_SPARC_HIX22 R_SPARC = 48
R_SPARC_LOX10 R_SPARC = 49
R_SPARC_H44 R_SPARC = 50
R_SPARC_M44 R_SPARC = 51
R_SPARC_L44 R_SPARC = 52
R_SPARC_REGISTER R_SPARC = 53
R_SPARC_UA64 R_SPARC = 54
R_SPARC_UA16 R_SPARC = 55
)
(R_SPARC) GoString関数
func (i R_SPARC) GoString() string
(R_SPARC) String関数
func (i R_SPARC) String() string
R_X86_64型
x86-64の再配置型。
type R_X86_64 int
const (
R_X86_64_NONE R_X86_64 = 0 /* No relocation. */
R_X86_64_64 R_X86_64 = 1 /* Add 64 bit symbol value. */
R_X86_64_PC32 R_X86_64 = 2 /* PC-relative 32 bit signed sym value. */
R_X86_64_GOT32 R_X86_64 = 3 /* PC-relative 32 bit GOT offset. */
R_X86_64_PLT32 R_X86_64 = 4 /* PC-relative 32 bit PLT offset. */
R_X86_64_COPY R_X86_64 = 5 /* Copy data from shared object. */
R_X86_64_GLOB_DAT R_X86_64 = 6 /* Set GOT entry to data address. */
R_X86_64_JMP_SLOT R_X86_64 = 7 /* Set GOT entry to code address. */
R_X86_64_RELATIVE R_X86_64 = 8 /* Add load address of shared object. */
R_X86_64_GOTPCREL R_X86_64 = 9 /* Add 32 bit signed pcrel offset to GOT. */
R_X86_64_32 R_X86_64 = 10 /* Add 32 bit zero extended symbol value */
R_X86_64_32S R_X86_64 = 11 /* Add 32 bit sign extended symbol value */
R_X86_64_16 R_X86_64 = 12 /* Add 16 bit zero extended symbol value */
R_X86_64_PC16 R_X86_64 = 13 /* Add 16 bit signed extended pc relative symbol value */
R_X86_64_8 R_X86_64 = 14 /* Add 8 bit zero extended symbol value */
R_X86_64_PC8 R_X86_64 = 15 /* Add 8 bit signed extended pc relative symbol value */
R_X86_64_DTPMOD64 R_X86_64 = 16 /* ID of module containing symbol */
R_X86_64_DTPOFF64 R_X86_64 = 17 /* Offset in TLS block */
R_X86_64_TPOFF64 R_X86_64 = 18 /* Offset in static TLS block */
R_X86_64_TLSGD R_X86_64 = 19 /* PC relative offset to GD GOT entry */
R_X86_64_TLSLD R_X86_64 = 20 /* PC relative offset to LD GOT entry */
R_X86_64_DTPOFF32 R_X86_64 = 21 /* Offset in TLS block */
R_X86_64_GOTTPOFF R_X86_64 = 22 /* PC relative offset to IE GOT entry */
R_X86_64_TPOFF32 R_X86_64 = 23 /* Offset in static TLS block */
)
(R_X86_64) GoString関数
func (i R_X86_64) GoString() string
(R_X86_64) String関数
func (i R_X86_64) String() string
Rel32型
ELF32再配置は加数フィールドを必要としません。
type Rel32 struct {
Off uint32 /* 再配置されるロケーション */
Info uint32 /* 再配置タイプとシンボルインデックス */
}
Rel64型
ELF64再配置は加数フィールドを必要としません。
type Rel64 struct {
Off uint64 /* 再配置されるロケーション */
Info uint64 /* 再配置タイプとシンボルインデックス */
}
Rela32
ELF32再配置は加数フィールドを必要としません。
type Rela32 struct {
Off uint32 /* 再配置されるロケーション */
Info uint32 /* 再配置タイプとシンボルインデックス */
Addend int32 /* 加数 */
}
Rela64
ELF64再配置は加数フィールドを必要としません。
type Rela64 struct {
Off uint64 /* 再配置されるロケーション */
Info uint64 /* 再配置タイプとシンボルインデックス */
Addend int64 /* 加数 */
}
Section型
SectionはELFファイルの単一セクションを表します。
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 unexported fields
}
(*Section) Data関数
func (s *Section) Data() ([]byte, os.Error)
DataはELFセクションのコンテンツの読み込みおよび返却を行います。
(*Section) Open関数
func (s *Section) Open() io.ReadSeeker
OpenはELFセクションを読み込み、ReadSeekerを返します。
Section32型
ELF32セクションヘッダ。
type Section32 struct {
Name uint32 /* セクション名(セクションヘッダ文字列テーブルへのインデックス) */
Type uint32 /* セクションタイプ */
Flags uint32 /* セクションフラグ */
Addr uint32 /* メモリイメージのアドレス */
Off uint32 /* ファイルのオフセット */
Size uint32 /* バイト単位でのサイズ */
Link uint32 /* 関連セクションのインデックス */
Info uint32 /* セクションタイプの依存 */
Addralign uint32 /* 調整バイト */
Entsize uint32 /* セクションの各エントリサイズ */
}
Section64型
ELF64セクションヘッダ。
type Section64 struct {
Name uint32 /* セクション名(セクションヘッダ文字列テーブルへのインデックス) */
Type uint32 /* セクションタイプ */
Flags uint64 /* セクションフラグ */
Addr uint64 /* メモリイメージのアドレス */
Off uint64 /* ファイルのオフセット */
Size uint64 /* バイト単位でのサイズ */
Link uint32 /* 関連セクションのインデックス */
Info uint32 /* セクションタイプの依存 */
Addralign uint64 /* 調整バイト */
Entsize uint64 /* セクションの各エントリサイズ */
}
SectionFlag型
セクションフラグ。
type SectionFlag uint32
const (
SHF_WRITE SectionFlag = 0x1 /* 書き込み可能なデータを含む */
SHF_ALLOC SectionFlag = 0x2 /* メモリを占有する */
SHF_EXECINSTR SectionFlag = 0x4 /* 命令を含む */
SHF_MERGE SectionFlag = 0x10 /* マージされる可能性がある */
SHF_STRINGS SectionFlag = 0x20 /* 文字列を含む */
SHF_INFO_LINK SectionFlag = 0x40 /* sh_infoにセクションインデックスを保持 */
SHF_LINK_ORDER SectionFlag = 0x80 /* 特別なオーダー条件 */
SHF_OS_NONCONFORMING SectionFlag = 0x100 /* OS特有の処理が必要 */
SHF_GROUP SectionFlag = 0x200 /* セクショングループのメンバ */
SHF_TLS SectionFlag = 0x400 /* TLSデータを含む */
SHF_MASKOS SectionFlag = 0x0ff00000 /* OS固有セマンティクス */
SHF_MASKPROC SectionFlag = 0xf0000000 /* プロセッサ固有セマンティクス */
)
(SectionFlag) GoString関数
func (i SectionFlag) GoString() string
(SectionFlag) String関数
func (i SectionFlag) String() string
SectionHeader型
SectionHeaderは、単一ELFセクションヘッダを表します。
type SectionHeader struct {
Name string
Type SectionType
Flags SectionFlag
Addr uint64
Offset uint64
Size uint64
Link uint32
Info uint32
Addralign uint64
Entsize uint64
}
SectionIndex型
特別なセクションインデックス。
type SectionIndex int
const (
SHN_UNDEF SectionIndex = 0 /* 未定義 */
SHN_LORESERVE SectionIndex = 0xff00 /* 予約された範囲の先頭 */
SHN_LOPROC SectionIndex = 0xff00 /* プロセッサ固有値(From) */
SHN_HIPROC SectionIndex = 0xff1f /* プロセッサ固有値(To) */
SHN_LOOS SectionIndex = 0xff20 /* OS固有値(From) */
SHN_HIOS SectionIndex = 0xff3f /* OS固有値(To) */
SHN_ABS SectionIndex = 0xfff1 /* 絶対値 */
SHN_COMMON SectionIndex = 0xfff2 /* 共通データ */
SHN_XINDEX SectionIndex = 0xffff /* エスケープ(インデックスを別の場所へ格納) */
SHN_HIRESERVE SectionIndex = 0xffff /* 予約された範囲の末尾 */
)
(SectionIndex) GoString関数
func (i SectionIndex) GoString() string
(SectionIndex) String関数
func (i SectionIndex) String() string
SectionType型
セクション型。
type SectionType uint32
const (
SHT_NULL SectionType = 0 /* 非アクティブ */
SHT_PROGBITS SectionType = 1 /* プログラム定義情報 */
SHT_SYMTAB SectionType = 2 /* シンボルテーブルセクション */
SHT_STRTAB SectionType = 3 /* 文字列テーブルセクション */
SHT_RELA SectionType = 4 /* 加数による再配置セクション */
SHT_HASH SectionType = 5 /* シンボルハッシュテーブルセクション */
SHT_DYNAMIC SectionType = 6 /* 動的セクション */
SHT_NOTE SectionType = 7 /* ノートセクション */
SHT_NOBITS SectionType = 8 /* スペースセクション */
SHT_REL SectionType = 9 /* 再配置セクション(加数無し) */
SHT_SHLIB SectionType = 10 /* 予約されています(目的不明) */
SHT_DYNSYM SectionType = 11 /* 動的シンボルテーブルセクション */
SHT_INIT_ARRAY SectionType = 14 /* 初期化関数ポインタ */
SHT_FINI_ARRAY SectionType = 15 /* 終了関数ポインタ */
SHT_PREINIT_ARRAY SectionType = 16 /* 初期化前関数ポインタ */
SHT_GROUP SectionType = 17 /* セクショングループ */
SHT_SYMTAB_SHNDX SectionType = 18 /* セクションインデックス(SHN_XINDEX参照) */
SHT_LOOS SectionType = 0x60000000 /* OS固有セマンティクス(From) */
SHT_HIOS SectionType = 0x6fffffff /* OS固有セマンティクス(To) */
SHT_LOPROC SectionType = 0x70000000 /* プロセッサの予約された範囲 */
SHT_HIPROC SectionType = 0x7fffffff /* 固有セクションヘッダタイプ */
SHT_LOUSER SectionType = 0x80000000 /* アプリケーションの予約された範囲 */
SHT_HIUSER SectionType = 0xffffffff /* 固有インデックス */
)
(SectionType) GoString関数
func (i SectionType) GoString() string
(SectionType) String関数
func (i SectionType) String() string
Sym32型
ELF32シンボル。
type Sym32 struct {
Name uint32
Value uint32
Size uint32
Info uint8
Other uint8
Shndx uint16
}
Sym64型
ELF64シンボルテーブルエントリ。
type Sym64 struct {
Name uint32 /* 名称の文字列テーブルインデックス */
Info uint8 /* タイプ、およびバインディング情報 */
Other uint8 /* 予約されています(使用できません) */
Shndx uint16 /* シンボルのセクションインデックス */
Value uint64 /* シンボル値 */
Size uint64 /* 関連付けられたオブジェクトのサイズ */
}
SymBind型
シンボルバインディング – ELFNN_ST_BIND – st_info
type SymBind int
const (
STB_LOCAL SymBind = 0 /* ローカルシンボル */
STB_GLOBAL SymBind = 1 /* グローバルシンボル */
STB_WEAK SymBind = 2 /* グローバルライク(優先順位低) */
STB_LOOS SymBind = 10 /* OSの予約された範囲 */
STB_HIOS SymBind = 12 /* 固有セマンティクス */
STB_LOPROC SymBind = 13 /* プロセッサの予約された範囲 */
STB_HIPROC SymBind = 15 /* 固有セマンティクス */
)
ST_BIND関数
func ST_BIND(info uint8) SymBind
(SymBind) GoString関数
func (i SymBind) GoString() string
(SymBind) String関数
func (i SymBind) String() string
SymType型
シンボル型 – ELFNN_ST_TYPE – st_info
type SymType int
const (
STT_NOTYPE SymType = 0 /* 未定義タイプ */
STT_OBJECT SymType = 1 /* データオブジェクト */
STT_FUNC SymType = 2 /* 関数 */
STT_SECTION SymType = 3 /* セクション */
STT_FILE SymType = 4 /* ソースファイル */
STT_COMMON SymType = 5 /* 初期化されていない共通ブロック */
STT_TLS SymType = 6 /* TLSオブジェクト */
STT_LOOS SymType = 10 /* OSの予約された範囲 */
STT_HIOS SymType = 12 /* 固有セマンティクス */
STT_LOPROC SymType = 13 /* プロセッサの予約された範囲 */
STT_HIPROC SymType = 15 /* 固有セマンティクス */
)
(SymType) GoString関数
func (i SymType) GoString() string
(SymType) String関数
func (i SymType) String() string
SymVis型
シンボル可視性 – ELFNN_ST_VISIBILITY – st_other
type SymVis int
const (
STV_DEFAULT SymVis = 0x0 /* デフォルト可視性(binding参照) */
STV_INTERNAL SymVis = 0x1 /* 再配置可能なオブジェクトへの特別な目的 */
STV_HIDDEN SymVis = 0x2 /* 不可視 */
STV_PROTECTED SymVis = 0x3 /* 可視(プリエンティブは不可視) */
)
ST_VISIBILITY関数
func ST_VISIBILITY(other uint8) SymVis
(SymVis) GoString関数
func (i SymVis) GoString() string
(SymVis) String関数
func (i SymVis) String() string
Symbol型
SymbolはELFシンボルテーブルセクションのエントリを表します。
type Symbol struct {
Name uint32
Info, Other byte
Section uint32
Value, Size uint64
}
Type型
Typeは、Header.Typeで使われています。
type Type uint16
const (
ET_NONE Type = 0 /* 不明タイプ */
ET_REL Type = 1 /* 再配置 */
ET_EXEC Type = 2 /* 実行可能 */
ET_DYN Type = 3 /* 共有オブジェクト */
ET_CORE Type = 4 /* コアファイル */
ET_LOOS Type = 0xfe00 /* OS固有値(From) */
ET_HIOS Type = 0xfeff /* OS固有値(To) */
ET_LOPROC Type = 0xff00 /* プロセッサ固有値(From) */
ET_HIPROC Type = 0xffff /* プロセッサ固有値(To) */
)
(Type) GoString関数
func (i Type) GoString() string
(Type) String関数
func (i Type) String() string
Version型
Versionは、Header.Ident[EI_VERSION]とHeader.Versionで使用されています。
type Version byte
const (
EV_NONE Version = 0
EV_CURRENT Version = 1
)
(Version) GoString関数
func (i Version) GoString() string
(Version) String関数
func (i Version) String() string
Trackback URL
Comments