version: 1.10
package macho
import "debug/macho"
Overview
Package macho implements access to Mach-O object files.
Index
- Constants
- Variables
- type Cpu
- type Dylib
- type DylibCmd
- type Dysymtab
- type DysymtabCmd
- type FatArch
- type FatArchHeader
- type FatFile
- 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
- func (f File) Segment(name string) Segment
- type FileHeader
- type FormatError
- type Load
- type LoadBytes
- type LoadCmd
- type Nlist32
- type Nlist64
- type Regs386
- type RegsAMD64
- type Reloc
- type RelocTypeARM
- type RelocTypeARM64
- type RelocTypeGeneric
- type RelocTypeX86_64
- type Rpath
- type RpathCmd
- type Section
- type Section32
- type Section64
- type SectionHeader
- type Segment
- type Segment32
- type Segment64
- type SegmentHeader
- type Symbol
- type Symtab
- type SymtabCmd
- type Thread
- type Type
Package files
fat.go file.go macho.go reloctype.go reloctype_string.go
Constants
- const (
- FlagNoUndefs uint32 = 0x1
- FlagIncrLink uint32 = 0x2
- FlagDyldLink uint32 = 0x4
- FlagBindAtLoad uint32 = 0x8
- FlagPrebound uint32 = 0x10
- FlagSplitSegs uint32 = 0x20
- FlagLazyInit uint32 = 0x40
- FlagTwoLevel uint32 = 0x80
- FlagForceFlat uint32 = 0x100
- FlagNoMultiDefs uint32 = 0x200
- FlagNoFixPrebinding uint32 = 0x400
- FlagPrebindable uint32 = 0x800
- FlagAllModsBound uint32 = 0x1000
- FlagSubsectionsViaSymbols uint32 = 0x2000
- FlagCanonical uint32 = 0x4000
- FlagWeakDefines uint32 = 0x8000
- FlagBindsToWeak uint32 = 0x10000
- FlagAllowStackExecution uint32 = 0x20000
- FlagRootSafe uint32 = 0x40000
- FlagSetuidSafe uint32 = 0x80000
- FlagNoReexportedDylibs uint32 = 0x100000
- FlagPIE uint32 = 0x200000
- FlagDeadStrippableDylib uint32 = 0x400000
- FlagHasTLVDescriptors uint32 = 0x800000
- FlagNoHeapExecution uint32 = 0x1000000
- FlagAppExtensionSafe uint32 = 0x2000000
- )
Variables
- var ErrNotFat = &FormatError{0, "not a fat Mach-O file", nil}
ErrNotFat is returned from NewFatFile or OpenFat when the file is not a universal binary but may be a thin binary, based on its magic number.
type Cpu ¶
- type Cpu uint32
A Cpu is a Mach-O cpu type.
func (Cpu) GoString ¶
func (Cpu) String ¶
type Dylib ¶
A Dylib represents a Mach-O load dynamic library command.
type DylibCmd ¶
A DylibCmd is a Mach-O load dynamic library command.
type Dysymtab ¶
- type Dysymtab struct {
- LoadBytes
- DysymtabCmd
- IndirectSyms []uint32 // indices into Symtab.Syms
- }
A Dysymtab represents a Mach-O dynamic symbol table command.
type DysymtabCmd ¶
- type DysymtabCmd struct {
- Cmd LoadCmd
- Len uint32
- Ilocalsym uint32
- Nlocalsym uint32
- Iextdefsym uint32
- Nextdefsym uint32
- Iundefsym uint32
- Nundefsym uint32
- Tocoffset uint32
- Ntoc uint32
- Modtaboff uint32
- Nmodtab uint32
- Extrefsymoff uint32
- Nextrefsyms uint32
- Indirectsymoff uint32
- Nindirectsyms uint32
- Extreloff uint32
- Nextrel uint32
- Locreloff uint32
- Nlocrel uint32
- }
A DysymtabCmd is a Mach-O dynamic symbol table command.
type FatArch ¶
- type FatArch struct {
- FatArchHeader
- *File
- }
A FatArch is a Mach-O File inside a FatFile.
type FatArchHeader ¶
A FatArchHeader represents a fat header for a specific image architecture.
type FatFile ¶
A FatFile is a Mach-O universal binary that contains at least one architecture.
func NewFatFile ¶
NewFatFile creates a new FatFile for accessing all the Mach-O images in a universal binary. The Mach-O binary is expected to start at position 0 in the ReaderAt.
func OpenFat ¶
OpenFat opens the named file using os.Open and prepares it for use as a Mach-O universal binary.
func (*FatFile) Close ¶
type File ¶
A File represents an open Mach-O file.
func NewFile ¶
NewFile creates a new File for accessing a Mach-O binary in an underlying reader. The Mach-O binary is expected to start at position 0 in the ReaderAt.
func Open ¶
Open opens the named file using os.Open and prepares it for use as a Mach-O binary.
func (*File) Close ¶
Close closes the File. If the File was created using NewFile directly instead of Open, Close has no effect.
func (*File) DWARF ¶
DWARF returns the DWARF debug information for the Mach-O file.
func (*File) ImportedLibraries ¶
ImportedLibraries returns the paths of all libraries referred to by the binary f that are expected to be linked with the binary at dynamic link time.
func (*File) ImportedSymbols ¶
ImportedSymbols returns the names of all symbols referred to by the binary f that are expected to be satisfied by other libraries at dynamic load time.
func (*File) Section ¶
Section returns the first section with the given name, or nil if no such section exists.
func (*File) Segment ¶
Segment returns the first Segment with the given name, or nil if no such segment exists.
type FileHeader ¶
A FileHeader represents a Mach-O file header.
type FormatError ¶
- type FormatError struct {
- // contains filtered or unexported fields
- }
FormatError is returned by some operations if the data does not have the correct format for an object file.
func (*FormatError) Error ¶
- func (e *FormatError) Error() string
type Load ¶
- type Load interface {
- Raw() []byte
- }
A Load represents any Mach-O load command.
type LoadBytes ¶
- type LoadBytes []byte
A LoadBytes is the uninterpreted bytes of a Mach-O load command.
func (LoadBytes) Raw ¶
type LoadCmd ¶
- type LoadCmd uint32
A LoadCmd is a Mach-O load command.
- const (
- LoadCmdSegment LoadCmd = 0x1
- LoadCmdSymtab LoadCmd = 0x2
- LoadCmdThread LoadCmd = 0x4
- LoadCmdUnixThread LoadCmd = 0x5 // thread+stack
- LoadCmdDysymtab LoadCmd = 0xb
- LoadCmdDylib LoadCmd = 0xc // load dylib command
- LoadCmdDylinker LoadCmd = 0xf // id dylinker command (not load dylinker command)
- LoadCmdSegment64 LoadCmd = 0x19
- LoadCmdRpath LoadCmd = 0x8000001c
- )
func (LoadCmd) GoString ¶
func (LoadCmd) String ¶
type Nlist32 ¶
An Nlist32 is a Mach-O 32-bit symbol table entry.
type Nlist64 ¶
An Nlist64 is a Mach-O 64-bit symbol table entry.
type Regs386 ¶
Regs386 is the Mach-O 386 register structure.
type RegsAMD64 ¶
RegsAMD64 is the Mach-O AMD64 register structure.
type Reloc ¶
- type Reloc struct {
- Addr uint32
- Value uint32
- // when Scattered == false && Extern == true, Value is the symbol number.
- // when Scattered == false && Extern == false, Value is the section number.
- // when Scattered == true, Value is the value that this reloc refers to.
- Type uint8
- Len uint8 // 0=byte, 1=word, 2=long, 3=quad
- Pcrel bool
- Extern bool // valid if Scattered == false
- Scattered bool
- }
A Reloc represents a Mach-O relocation.
type RelocTypeARM ¶
- type RelocTypeARM int
- const (
- ARM_RELOC_VANILLA RelocTypeARM = 0
- ARM_RELOC_PAIR RelocTypeARM = 1
- ARM_RELOC_SECTDIFF RelocTypeARM = 2
- ARM_RELOC_LOCAL_SECTDIFF RelocTypeARM = 3
- ARM_RELOC_PB_LA_PTR RelocTypeARM = 4
- ARM_RELOC_BR24 RelocTypeARM = 5
- ARM_THUMB_RELOC_BR22 RelocTypeARM = 6
- ARM_THUMB_32BIT_BRANCH RelocTypeARM = 7
- ARM_RELOC_HALF RelocTypeARM = 8
- ARM_RELOC_HALF_SECTDIFF RelocTypeARM = 9
- )
func (RelocTypeARM) GoString ¶
- func (r RelocTypeARM) GoString() string
func (RelocTypeARM) String ¶
- func (i RelocTypeARM) String() string
type RelocTypeARM64 ¶
- type RelocTypeARM64 int
- const (
- ARM64_RELOC_UNSIGNED RelocTypeARM64 = 0
- ARM64_RELOC_SUBTRACTOR RelocTypeARM64 = 1
- ARM64_RELOC_BRANCH26 RelocTypeARM64 = 2
- ARM64_RELOC_PAGE21 RelocTypeARM64 = 3
- ARM64_RELOC_PAGEOFF12 RelocTypeARM64 = 4
- ARM64_RELOC_GOT_LOAD_PAGE21 RelocTypeARM64 = 5
- ARM64_RELOC_GOT_LOAD_PAGEOFF12 RelocTypeARM64 = 6
- ARM64_RELOC_POINTER_TO_GOT RelocTypeARM64 = 7
- ARM64_RELOC_TLVP_LOAD_PAGE21 RelocTypeARM64 = 8
- ARM64_RELOC_TLVP_LOAD_PAGEOFF12 RelocTypeARM64 = 9
- ARM64_RELOC_ADDEND RelocTypeARM64 = 10
- )
func (RelocTypeARM64) GoString ¶
- func (r RelocTypeARM64) GoString() string
func (RelocTypeARM64) String ¶
- func (i RelocTypeARM64) String() string
type RelocTypeGeneric ¶
- type RelocTypeGeneric int
- const (
- GENERIC_RELOC_VANILLA RelocTypeGeneric = 0
- GENERIC_RELOC_PAIR RelocTypeGeneric = 1
- GENERIC_RELOC_SECTDIFF RelocTypeGeneric = 2
- GENERIC_RELOC_PB_LA_PTR RelocTypeGeneric = 3
- GENERIC_RELOC_LOCAL_SECTDIFF RelocTypeGeneric = 4
- GENERIC_RELOC_TLV RelocTypeGeneric = 5
- )
func (RelocTypeGeneric) GoString ¶
- func (r RelocTypeGeneric) GoString() string
func (RelocTypeGeneric) String ¶
- func (i RelocTypeGeneric) String() string
type RelocTypeX86_64 ¶
- type RelocTypeX86_64 int
- const (
- X86_64_RELOC_UNSIGNED RelocTypeX86_64 = 0
- X86_64_RELOC_SIGNED RelocTypeX86_64 = 1
- X86_64_RELOC_BRANCH RelocTypeX86_64 = 2
- X86_64_RELOC_GOT_LOAD RelocTypeX86_64 = 3
- X86_64_RELOC_GOT RelocTypeX86_64 = 4
- X86_64_RELOC_SUBTRACTOR RelocTypeX86_64 = 5
- X86_64_RELOC_SIGNED_1 RelocTypeX86_64 = 6
- X86_64_RELOC_SIGNED_2 RelocTypeX86_64 = 7
- X86_64_RELOC_SIGNED_4 RelocTypeX86_64 = 8
- X86_64_RELOC_TLV RelocTypeX86_64 = 9
- )
func (RelocTypeX86_64) GoString ¶
- func (r RelocTypeX86_64) GoString() string
func (RelocTypeX86_64) String ¶
- func (i RelocTypeX86_64) String() string
type Rpath ¶
A Rpath represents a Mach-O rpath command.
type RpathCmd ¶
A RpathCmd is a Mach-O rpath command.
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
- }
func (*Section) Data ¶
Data reads and returns the contents of the Mach-O section.
func (*Section) Open ¶
- func (s *Section) Open() io.ReadSeeker
Open returns a new ReadSeeker reading the Mach-O section.
type Section32 ¶
A Section32 is a 32-bit Mach-O section header.
type Section64 ¶
A Section64 is a 64-bit Mach-O section header.
type SectionHeader ¶
type Segment ¶
- type Segment struct {
- LoadBytes
- SegmentHeader
- // 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
- }
A Segment represents a Mach-O 32-bit or 64-bit load segment command.
func (*Segment) Data ¶
Data reads and returns the contents of the segment.
func (*Segment) Open ¶
- func (s *Segment) Open() io.ReadSeeker
Open returns a new ReadSeeker reading the segment.
type Segment32 ¶
A Segment32 is a 32-bit Mach-O segment load command.
type Segment64 ¶
A Segment64 is a 64-bit Mach-O segment load command.
type SegmentHeader ¶
A SegmentHeader is the header for a Mach-O 32-bit or 64-bit load segment command.
type Symbol ¶
A Symbol is a Mach-O 32-bit or 64-bit symbol table entry.
type Symtab ¶
A Symtab represents a Mach-O symbol table command.
type SymtabCmd ¶
A SymtabCmd is a Mach-O symbol table command.
type Thread ¶
A Thread is a Mach-O thread state command.
type Type ¶
- type Type uint32
A Type is the Mach-O file type, e.g. an object file, executable, or dynamic library.