macho

package module
v1.1.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 18, 2021 License: MIT Imports: 21 Imported by: 31

README ¶

go-macho [WIP] 🚧

Go PkgGoDev License

Package macho implements access to and creation of Mach-O object files.


Why 🤔

This package goes beyond the Go's debug/macho to:

  • Cover ALL load commands and architectures
  • Provide nice summary string output
  • Allow for creating custom macho

Install

$ go get github.com/blacktop/go-macho

Getting Started

package main

import "github.com/blacktop/go-macho"

func main() {
    f, err := os.Open("/path/to/macho")
    if err != nil {
        panic(err)
    }

    m, err := macho.NewFile(f)
    if err != nil {
        panic(err)
    }

    fmt.Println(m.FileTOC.String())
}

License

MIT Copyright (c) 2021 blacktop

Documentation ¶

Index ¶

Constants ¶

This section is empty.

Variables ¶

View Source
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.

Functions ¶

This section is empty.

Types ¶

type BuildVersion ¶

type BuildVersion struct {
	LoadBytes
	types.BuildVersionCmd
	Platform    string /* platform */
	Minos       string /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
	Sdk         string /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
	NumTools    uint32 /* number of tool entries following this */
	Tool        string
	ToolVersion string
}

A BuildVersion represents a Mach-O build for platform min OS version.

func (*BuildVersion) String ¶ added in v1.0.4

func (b *BuildVersion) String() string

type CodeSignature ¶

type CodeSignature struct {
	LoadBytes
	types.CodeSignatureCmd
	Offset uint32
	Size   uint32
	ctypes.CodeSignature
}

func (*CodeSignature) String ¶ added in v1.0.8

func (c *CodeSignature) String() string

type DataInCode ¶

type DataInCode struct {
	LoadBytes
	types.DataInCodeCmd
	Offset  uint32
	Size    uint32
	Entries []types.DataInCodeEntry
}

A DataInCode represents a Mach-O data in code command.

func (*DataInCode) String ¶ added in v1.0.8

func (d *DataInCode) String() string

type DyldChainedFixups ¶ added in v1.0.6

type DyldChainedFixups struct {
	LoadBytes
	types.DyldChainedFixupsCmd
	Offset uint32
	Size   uint32
}

A DyldChainedFixups used with linkedit_data_command

func (*DyldChainedFixups) String ¶ added in v1.0.6

func (cf *DyldChainedFixups) String() string

type DyldEnvironment ¶ added in v1.0.13

type DyldEnvironment struct {
	LoadBytes
	types.DyldEnvironmentCmd
	Name string
}

A DyldEnvironment is a string for dyld to treat like environment variable

func (*DyldEnvironment) String ¶ added in v1.0.13

func (d *DyldEnvironment) String() string

type DyldExportsTrie ¶ added in v1.0.6

type DyldExportsTrie struct {
	LoadBytes
	types.DyldExportsTrieCmd
	Offset uint32
	Size   uint32
}

A DyldExportsTrie used with linkedit_data_command, payload is trie

func (*DyldExportsTrie) String ¶ added in v1.0.6

func (t *DyldExportsTrie) String() string

type DyldInfo ¶

type DyldInfo struct {
	LoadBytes
	types.DyldInfoCmd
	RebaseOff    uint32 // file offset to rebase info
	RebaseSize   uint32 //  size of rebase info
	BindOff      uint32 // file offset to binding info
	BindSize     uint32 // size of binding info
	WeakBindOff  uint32 // file offset to weak binding info
	WeakBindSize uint32 //  size of weak binding info
	LazyBindOff  uint32 // file offset to lazy binding info
	LazyBindSize uint32 //  size of lazy binding info
	ExportOff    uint32 // file offset to export info
	ExportSize   uint32 //  size of export info
}

A DyldInfo represents a Mach-O id dyld info command.

func (*DyldInfo) Copy ¶ added in v1.0.8

func (d *DyldInfo) Copy() *DyldInfo

func (*DyldInfo) LoadSize ¶ added in v1.0.8

func (d *DyldInfo) LoadSize(t *FileTOC) uint32

func (*DyldInfo) Put ¶ added in v1.0.8

func (d *DyldInfo) Put(b []byte, o binary.ByteOrder) int

func (*DyldInfo) String ¶ added in v1.0.8

func (d *DyldInfo) String() string

type DyldInfoOnly ¶ added in v1.0.8

type DyldInfoOnly struct {
	LoadBytes
	types.DyldInfoOnlyCmd
	RebaseOff    uint32 // file offset to rebase info
	RebaseSize   uint32 //  size of rebase info
	BindOff      uint32 // file offset to binding info
	BindSize     uint32 // size of binding info
	WeakBindOff  uint32 // file offset to weak binding info
	WeakBindSize uint32 //  size of weak binding info
	LazyBindOff  uint32 // file offset to lazy binding info
	LazyBindSize uint32 //  size of lazy binding info
	ExportOff    uint32 // file offset to export info
	ExportSize   uint32 //  size of export info
}

DyldInfoOnly is compressed dyld information only

func (*DyldInfoOnly) Copy ¶ added in v1.0.8

func (d *DyldInfoOnly) Copy() *DyldInfoOnly

func (*DyldInfoOnly) LoadSize ¶ added in v1.0.8

func (d *DyldInfoOnly) LoadSize(t *FileTOC) uint32

func (*DyldInfoOnly) Put ¶ added in v1.0.8

func (d *DyldInfoOnly) Put(b []byte, o binary.ByteOrder) int

func (*DyldInfoOnly) String ¶ added in v1.0.8

func (d *DyldInfoOnly) String() string

type Dylib ¶

type Dylib struct {
	LoadBytes
	types.DylibCmd
	Name           string
	Time           uint32
	CurrentVersion string
	CompatVersion  string
}

A Dylib represents a Mach-O load dynamic library command.

func (*Dylib) String ¶ added in v1.0.4

func (d *Dylib) String() string

type DylibID ¶

type DylibID Dylib

A DylibID represents a Mach-O load dynamic library ident command.

func (*DylibID) String ¶ added in v1.0.9

func (d *DylibID) String() string

type DylinkerID ¶ added in v1.0.26

type DylinkerID struct {
	LoadBytes
	types.DylinkerIDCmd
	Name string
}

DylinkerID dynamic linker identification

func (*DylinkerID) String ¶ added in v1.0.26

func (d *DylinkerID) String() string

type Dysymtab ¶

type Dysymtab struct {
	LoadBytes
	types.DysymtabCmd
	IndirectSyms []uint32 // indices into Symtab.Syms
}

A Dysymtab represents a Mach-O dynamic symbol table command.

func (*Dysymtab) String ¶ added in v1.0.8

func (d *Dysymtab) String() string

type EncryptionInfo ¶ added in v1.0.26

type EncryptionInfo struct {
	LoadBytes
	types.EncryptionInfoCmd
	Offset  uint32                 // file offset of encrypted range
	Size    uint32                 // file size of encrypted range
	CryptID types.EncryptionSystem // which enryption system, 0 means not-encrypted yet
}

A EncryptionInfo represents a Mach-O 32-bit encrypted segment information

func (*EncryptionInfo) Copy ¶ added in v1.0.26

func (e *EncryptionInfo) Copy() *EncryptionInfo

func (*EncryptionInfo) LoadSize ¶ added in v1.0.26

func (e *EncryptionInfo) LoadSize(t *FileTOC) uint32

func (*EncryptionInfo) Put ¶ added in v1.0.26

func (e *EncryptionInfo) Put(b []byte, o binary.ByteOrder) int

func (*EncryptionInfo) String ¶ added in v1.0.26

func (e *EncryptionInfo) String() string

type EncryptionInfo64 ¶ added in v1.0.6

type EncryptionInfo64 struct {
	LoadBytes
	types.EncryptionInfo64Cmd
	Offset  uint32                 // file offset of encrypted range
	Size    uint32                 // file size of encrypted range
	CryptID types.EncryptionSystem // which enryption system, 0 means not-encrypted yet
}

A EncryptionInfo64 represents a Mach-O 64-bit encrypted segment information

func (*EncryptionInfo64) Copy ¶ added in v1.0.6

func (*EncryptionInfo64) LoadSize ¶ added in v1.0.6

func (e *EncryptionInfo64) LoadSize(t *FileTOC) uint32

func (*EncryptionInfo64) Put ¶ added in v1.0.6

func (e *EncryptionInfo64) Put(b []byte, o binary.ByteOrder) int

func (*EncryptionInfo64) String ¶ added in v1.0.6

func (e *EncryptionInfo64) String() string

type EntryPoint ¶ added in v1.0.4

type EntryPoint struct {
	LoadBytes
	types.EntryPointCmd
	EntryOffset uint64
	StackSize   uint64
}

func (*EntryPoint) Copy ¶ added in v1.0.4

func (e *EntryPoint) Copy() *EntryPoint

func (*EntryPoint) LoadSize ¶ added in v1.0.4

func (e *EntryPoint) LoadSize(t *FileTOC) uint32

func (*EntryPoint) Put ¶ added in v1.0.4

func (e *EntryPoint) Put(b []byte, o binary.ByteOrder) int

func (*EntryPoint) String ¶ added in v1.0.4

func (e *EntryPoint) String() string

type FatArch ¶

type FatArch struct {
	FatArchHeader
	*File
}

A FatArch is a Mach-O File inside a FatFile.

type FatArchHeader ¶

type FatArchHeader struct {
	CPU    types.CPU
	SubCPU types.CPUSubtype
	Offset uint32
	Size   uint32
	Align  uint32
}

A FatArchHeader represents a fat header for a specific image architecture.

type FatFile ¶

type FatFile struct {
	Magic  types.Magic
	Arches []FatArch
	// contains filtered or unexported fields
}

A FatFile is a Mach-O universal binary that contains at least one architecture.

func NewFatFile ¶

func NewFatFile(r io.ReaderAt) (*FatFile, error)

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 ¶

func OpenFat(name string) (*FatFile, error)

OpenFat opens the named file using os.Open and prepares it for use as a Mach-O universal binary.

func (*FatFile) Close ¶

func (ff *FatFile) Close() error

Close with close the Mach-O Fat file.

type File ¶

type File struct {
	FileTOC

	Symtab   *Symtab
	Dysymtab *Dysymtab
	// contains filtered or unexported fields
}

A File represents an open Mach-O file.

func NewFile ¶

func NewFile(r io.ReaderAt, config ...FileConfig) (*File, error)

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 ¶

func Open(name string) (*File, error)

Open opens the named file using os.Open and prepares it for use as a Mach-O binary.

func (*File) BuildVersion ¶

func (f *File) BuildVersion() *BuildVersion

BuildVersion returns the build version load command, or nil if no build version exists.

func (*File) Close ¶

func (f *File) Close() error

Close closes the File. If the File was created using NewFile directly instead of Open, Close has no effect.

func (*File) CodeSignature ¶ added in v1.0.12

func (f *File) CodeSignature() *CodeSignature

CodeSignature returns the code signature, or nil if none exists.

func (*File) DWARF ¶

func (f *File) DWARF() (*dwarf.Data, error)

DWARF returns the DWARF debug information for the Mach-O file.

func (*File) DyldChainedFixups ¶ added in v1.0.21

func (f *File) DyldChainedFixups() (*fixupchains.DyldChainedFixups, error)

DyldChainedFixups returns the dyld chained fixups.

func (*File) DyldExports ¶ added in v1.1.8

func (f *File) DyldExports() ([]trie.TrieEntry, error)

DyldExports returns the dyld export trie symbols

func (*File) DyldExportsTrie ¶ added in v1.0.23

func (f *File) DyldExportsTrie() *DyldExportsTrie

DyldExportsTrie returns the dyld export trie load command, or nil if no dyld info exists.

func (*File) DyldInfo ¶

func (f *File) DyldInfo() *DyldInfo

DyldInfo returns the dyld info load command, or nil if no dyld info exists.

func (*File) DylibID ¶

func (f *File) DylibID() *DylibID

DylibID returns the dylib ID load command, or nil if no dylib ID exists.

func (*File) FileSets ¶ added in v1.1.9

func (f *File) FileSets() []*FilesetEntry

FileSets returns an array of Fileset entries.

func (*File) FindAddressSymbols ¶ added in v1.0.24

func (f *File) FindAddressSymbols(addr uint64) ([]Symbol, error)

func (*File) FindSectionForVMAddr ¶ added in v1.0.12

func (f *File) FindSectionForVMAddr(vmAddr uint64) *Section

FindSectionForVMAddr returns the section containing a given virtual memory ddress.

func (*File) FindSymbolAddress ¶

func (f *File) FindSymbolAddress(symbol string) (uint64, error)

func (*File) FunctionStartAddrs ¶ added in v1.1.7

func (f *File) FunctionStartAddrs(data ...byte) []uint64

FunctionStartAddrs returns the function starts array, or nil if none exists.

func (*File) FunctionStarts ¶ added in v1.0.5

func (f *File) FunctionStarts() *FunctionStarts

FunctionStarts returns the function starts array, or nil if none exists.

func (*File) GetBaseAddress ¶ added in v1.0.24

func (f *File) GetBaseAddress() uint64

GetBaseAddress returns the MachO's preferred load address

func (*File) GetBindName ¶ added in v1.1.3

func (f *File) GetBindName(pointer uint64) (string, error)

GetBindName returns the import name for a given dyld chained pointer

func (*File) GetCFStrings ¶ added in v1.1.1

func (f *File) GetCFStrings() ([]objc.CFString, error)

GetCFStrings parses all the cfstrings in tne MachO

func (*File) GetCString ¶ added in v1.0.5

func (f *File) GetCString(strVMAdr uint64) (string, error)

GetCString returns a c-string at a given virtual address in the MachO

func (*File) GetCStringAtOffset ¶ added in v1.0.32

func (f *File) GetCStringAtOffset(strOffset int64) (string, error)

GetCStringAtOffset returns a c-string at a given offset into the MachO

func (*File) GetFileSetFileByName ¶ added in v1.1.9

func (f *File) GetFileSetFileByName(name string) (*File, error)

GetFileSetFileByName returns the Fileset MachO for a given name.

func (*File) GetMangledTypeAtOffset ¶ added in v1.0.33

func (f *File) GetMangledTypeAtOffset(offset int64) (string, *stypes.TypeDescriptor, error)

GetMangledTypeAtOffset reads a mangled type at a given offset in the MachO

func (*File) GetObjCCategories ¶ added in v1.0.12

func (f *File) GetObjCCategories() ([]objc.Category, error)

func (*File) GetObjCClass ¶ added in v1.0.12

func (f *File) GetObjCClass(vmaddr uint64) (*objc.Class, error)

GetObjCClass parses an ObjC class at a given virtual memory address

func (*File) GetObjCClassInfo ¶ added in v1.0.12

func (f *File) GetObjCClassInfo(vmAddr uint64) (*objc.ClassRO64, error)

func (*File) GetObjCClasses ¶ added in v1.0.12

func (f *File) GetObjCClasses() ([]objc.Class, error)

func (*File) GetObjCImageInfo ¶ added in v1.0.12

func (f *File) GetObjCImageInfo() (*objc.ImageInfo, error)

func (*File) GetObjCInfo ¶ added in v1.0.12

func (f *File) GetObjCInfo() objc.Info

func (*File) GetObjCIvars ¶ added in v1.0.12

func (f *File) GetObjCIvars(vmAddr uint64) ([]objc.Ivar, error)

func (*File) GetObjCMethodList ¶ added in v1.0.12

func (f *File) GetObjCMethodList() ([]objc.Method, error)

func (*File) GetObjCMethodNames ¶ added in v1.0.12

func (f *File) GetObjCMethodNames() (map[string]uint64, error)

func (*File) GetObjCMethods ¶ added in v1.0.12

func (f *File) GetObjCMethods(vmAddr uint64) ([]objc.Method, error)

func (*File) GetObjCPlusLoadClasses ¶ added in v1.0.12

func (f *File) GetObjCPlusLoadClasses() ([]objc.Class, error)

func (*File) GetObjCProperties ¶ added in v1.0.12

func (f *File) GetObjCProperties(vmAddr uint64) ([]objc.Property, error)

func (*File) GetObjCProtocols ¶ added in v1.0.12

func (f *File) GetObjCProtocols() ([]objc.Protocol, error)

func (*File) GetObjCSelectorReferences ¶ added in v1.0.12

func (f *File) GetObjCSelectorReferences() (map[uint64]*objc.Selector, error)

func (*File) GetOffset ¶ added in v1.0.4

func (f *File) GetOffset(address uint64) (uint64, error)

GetOffset returns the file offset for a given virtual address

func (*File) GetSwiftAssociatedTypes ¶ added in v1.0.33

func (f *File) GetSwiftAssociatedTypes() (*[]swift.AssociatedTypeDescriptor, error)

GetSwiftAssociatedTypes parses all the associated types in the __TEXT.__swift5_assocty section

func (*File) GetSwiftBuiltinTypes ¶ added in v1.0.33

func (f *File) GetSwiftBuiltinTypes() (*[]swift.BuiltinType, error)

GetSwiftBuiltinTypes parses all the built-in types in the __TEXT.__swift5_builtin section

func (*File) GetSwiftClosures ¶ added in v1.0.33

func (f *File) GetSwiftClosures() (*[]swift.CaptureDescriptor, error)

GetSwiftClosures parses all the closure context objects in the __TEXT.__swift5_capture section

func (*File) GetSwiftFields ¶ added in v1.0.33

func (f *File) GetSwiftFields() (*[]fieldmd.Field, error)

GetSwiftFields parses all the fields in the __TEXT.__swift5_fieldmd section

func (*File) GetSwiftProtocolConformances ¶ added in v1.0.33

func (f *File) GetSwiftProtocolConformances() (*[]protocols.ConformanceDescriptor, error)

GetSwiftProtocolConformances parses all the protocol conformances in the __TEXT.__swift5_proto section

func (*File) GetSwiftProtocols ¶ added in v1.0.32

func (f *File) GetSwiftProtocols() (*[]protocols.Protocol, error)

GetSwiftProtocols parses all the protocols in the __TEXT.__swift5_protos section

func (*File) GetSwiftTypes ¶ added in v1.0.32

func (f *File) GetSwiftTypes() (*[]stypes.TypeDescriptor, error)

GetSwiftTypes parses all the types in the __TEXT.__swift5_types section

func (*File) GetVMAddress ¶ added in v1.0.4

func (f *File) GetVMAddress(offset uint64) (uint64, error)

GetVMAddress returns the virtal address for a given file offset

func (*File) HasFixups ¶ added in v1.0.26

func (f *File) HasFixups() bool

HasFixups does macho contain a LC_DYLD_CHAINED_FIXUPS load command

func (*File) HasObjC ¶ added in v1.0.12

func (f *File) HasObjC() bool

TODO refactor into a pkg

func (*File) HasObjCMessageReferences ¶ added in v1.0.12

func (f *File) HasObjCMessageReferences() bool

func (*File) HasPlusLoadMethod ¶ added in v1.0.12

func (f *File) HasPlusLoadMethod() bool

func (*File) ImportedLibraries ¶

func (f *File) ImportedLibraries() []string

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) ImportedSymbolNames ¶ added in v1.0.24

func (f *File) ImportedSymbolNames() ([]string, error)

ImportedSymbolNames 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) ImportedSymbols ¶

func (f *File) ImportedSymbols() ([]Symbol, error)

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) LibraryOrdinalName ¶ added in v1.0.28

func (f *File) LibraryOrdinalName(libraryOrdinal int) string

LibraryOrdinalName returns the depancy library oridinal's name

func (*File) ReadAt ¶ added in v1.1.10

func (f *File) ReadAt(p []byte, off int64) (n int, err error)

ReadAt reads data at offset within MachO

func (*File) Section ¶

func (f *File) Section(segment, section string) *Section

Section returns the section with the given name in the given segment, or nil if no such section exists.

func (*File) Segment ¶

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

Segment returns the first Segment with the given name, or nil if no such segment exists.

func (*File) Segments ¶

func (f *File) Segments() []*Segment

Segments returns all Segments.

func (*File) SourceVersion ¶

func (f *File) SourceVersion() *SourceVersion

SourceVersion returns the source version load command, or nil if no source version exists.

func (*File) UUID ¶

func (f *File) UUID() *UUID

UUID returns the UUID load command, or nil if no UUID exists.

type FileConfig ¶ added in v1.1.10

type FileConfig struct {
	Offset          int64
	LoadFilter      []types.LoadCmd
	VMAddrConverter types.VMAddrConverter

	SrcReader *io.SectionReader
}

FileConfig is a MachO file config object

type FileTOC ¶

type FileTOC struct {
	types.FileHeader
	ByteOrder binary.ByteOrder
	Loads     []Load
	Sections  sections
}

func (*FileTOC) AddLoad ¶

func (t *FileTOC) AddLoad(l Load)

func (*FileTOC) AddSection ¶

func (t *FileTOC) AddSection(s *Section)

AddSection adds section to the most recently added Segment

func (*FileTOC) AddSegment ¶

func (t *FileTOC) AddSegment(s *Segment)

AddSegment adds segment s to the file table of contents, and also zeroes out the segment information with the expectation that this will be added next.

func (*FileTOC) DerivedCopy ¶

func (t *FileTOC) DerivedCopy(Type types.HeaderFileType, Flags types.HeaderFlag) *FileTOC

DerivedCopy returns a modified copy of the TOC, with empty loads and sections, and with the specified header type and flags.

func (*FileTOC) FileSize ¶

func (t *FileTOC) FileSize() uint64

FileSize returns the size in bytes of the header, load commands, and the in-file contents of all the segments and sections included in those load commands, accounting for their offsets within the file.

func (*FileTOC) HdrSize ¶

func (t *FileTOC) HdrSize() uint32

HdrSize returns the size in bytes of the Macho header for a given magic number (where the magic number has been appropriately byte-swapped).

func (*FileTOC) LoadAlign ¶

func (t *FileTOC) LoadAlign() uint64

LoadAlign returns the required alignment of Load commands in a binary. This is used to add padding for necessary alignment.

func (*FileTOC) LoadSize ¶

func (t *FileTOC) LoadSize() uint32

LoadSize returns the size of all the load commands in a file's table-of contents (but not their associated data, e.g., sections and symbol tables)

func (*FileTOC) LoadsString ¶ added in v1.0.21

func (t *FileTOC) LoadsString() string

LoadsString returns a string representation of all the MachO's load commands

func (*FileTOC) Put ¶

func (t *FileTOC) Put(buffer []byte) int

Put writes the header and all load commands to buffer, using the byte ordering specified in FileTOC t. For sections, this writes the headers that come in-line with the segment Load commands, but does not write the reference data for those sections.

func (*FileTOC) String ¶

func (t *FileTOC) String() string

func (*FileTOC) SymbolSize ¶

func (t *FileTOC) SymbolSize() uint32

SymbolSize returns the size in bytes of a Symbol (Nlist32 or Nlist64)

func (*FileTOC) TOCSize ¶

func (t *FileTOC) TOCSize() uint32

TOCSize returns the size in bytes of the object file representation of the header and Load Commands (including Segments and Sections, but not their contents) at the beginning of a Mach-O file. This typically overlaps the text segment in the object file.

type FilesetEntry ¶ added in v1.0.9

type FilesetEntry struct {
	LoadBytes
	types.FilesetEntryCmd
	Addr    uint64 // memory address of the entry
	Offset  uint64 // file offset of the entry
	EntryID string // contained entry id
}

FilesetEntry used with fileset_entry_command

func (*FilesetEntry) String ¶ added in v1.0.9

func (f *FilesetEntry) String() string

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 FunctionStarts ¶

type FunctionStarts struct {
	LoadBytes
	types.FunctionStartsCmd
	Offset          uint32
	Size            uint32
	StartOffset     uint64
	NextFuncOffsets []uint64
	VMAddrs         []uint64
}

A FunctionStarts represents a Mach-O function starts command.

func (*FunctionStarts) String ¶ added in v1.0.8

func (f *FunctionStarts) String() string

type LazyLoadDylib ¶ added in v1.0.26

type LazyLoadDylib Dylib

func (*LazyLoadDylib) String ¶ added in v1.0.26

func (d *LazyLoadDylib) String() string

type LinkEditData ¶

type LinkEditData struct {
	LoadBytes
	types.LinkEditDataCmd
	Offset uint32
	Size   uint32
}

A LinkEditData represents a Mach-O linkedit data command.

type Load ¶

type Load interface {
	Raw() []byte
	String() string
	Command() types.LoadCmd
	LoadSize(*FileTOC) uint32 // Need the TOC for alignment, sigh.
	Put([]byte, binary.ByteOrder) int
}

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) Copy ¶

func (b LoadBytes) Copy() LoadBytes

func (LoadBytes) LoadSize ¶

func (b LoadBytes) LoadSize(t *FileTOC) uint32

func (LoadBytes) Raw ¶

func (b LoadBytes) Raw() []byte

func (LoadBytes) String ¶

func (b LoadBytes) String() string

type LoadCmdBytes ¶

type LoadCmdBytes struct {
	types.LoadCmd
	LoadBytes
}

LoadCmdBytes is a command-tagged sequence of bytes. This is used for Load Commands that are not (yet) interesting to us, and to common up this behavior for all those that are.

func (LoadCmdBytes) Copy ¶

func (s LoadCmdBytes) Copy() LoadCmdBytes

func (LoadCmdBytes) String ¶

func (s LoadCmdBytes) String() string

type LoadDylinker ¶ added in v1.0.4

type LoadDylinker struct {
	LoadBytes
	types.DylinkerCmd
	Name string
}

func (*LoadDylinker) String ¶ added in v1.0.4

func (d *LoadDylinker) String() string

type ReExportDylib ¶

type ReExportDylib Dylib

func (*ReExportDylib) String ¶ added in v1.0.9

func (d *ReExportDylib) String() string

type Regs386 ¶

type Regs386 struct {
	AX    uint32
	BX    uint32
	CX    uint32
	DX    uint32
	DI    uint32
	SI    uint32
	BP    uint32
	SP    uint32
	SS    uint32
	FLAGS uint32
	IP    uint32
	CS    uint32
	DS    uint32
	ES    uint32
	FS    uint32
	GS    uint32
}

Regs386 is the Mach-O 386 register structure.

type RegsAMD64 ¶

type RegsAMD64 struct {
	AX    uint64
	BX    uint64
	CX    uint64
	DX    uint64
	DI    uint64
	SI    uint64
	BP    uint64
	SP    uint64
	R8    uint64
	R9    uint64
	R10   uint64
	R11   uint64
	R12   uint64
	R13   uint64
	R14   uint64
	R15   uint64
	IP    uint64
	FLAGS uint64
	CS    uint64
	FS    uint64
	GS    uint64
}

RegsAMD64 is the Mach-O AMD64 register structure.

type RegsARM ¶

type RegsARM struct {
	R0   uint32
	R1   uint32
	R2   uint32
	R3   uint32
	R4   uint32
	R5   uint32
	R6   uint32
	R7   uint32
	R8   uint32
	R9   uint32
	R10  uint32
	R11  uint32
	R12  uint32
	SP   uint32
	LR   uint32
	PC   uint32
	CPSR uint32
}

RegsARM is the Mach-O ARM register structure.

type RegsARM64 ¶

type RegsARM64 struct {
	X0   uint64
	X1   uint64
	X2   uint64
	X3   uint64
	X4   uint64
	X5   uint64
	X6   uint64
	X7   uint64
	X8   uint64
	X9   uint64
	X10  uint64
	X11  uint64
	X12  uint64
	X13  uint64
	X14  uint64
	X15  uint64
	X16  uint64
	X17  uint64
	X18  uint64
	X19  uint64
	X20  uint64
	X21  uint64
	X22  uint64
	X23  uint64
	X24  uint64
	X25  uint64
	X26  uint64
	X27  uint64
	X28  uint64
	FP   uint64
	LR   uint64
	SP   uint64
	PC   uint64
	CPSR uint32
	PAD  uint32
}

RegsARM64 is the Mach-O ARM 64 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 Routines64 ¶

type Routines64 struct {
	LoadBytes
	types.Routines64Cmd
	InitAddress uint64
	InitModule  uint64
}

type Rpath ¶

type Rpath struct {
	LoadBytes
	types.RpathCmd
	Path string
}

A Rpath represents a Mach-O rpath command.

func (*Rpath) String ¶ added in v1.0.9

func (r *Rpath) String() string

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) Copy ¶

func (s *Section) Copy() *Section

func (*Section) Data ¶

func (s *Section) Data() ([]byte, error)

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.

func (*Section) Put32 ¶

func (s *Section) Put32(b []byte, o binary.ByteOrder) int

func (*Section) Put64 ¶

func (s *Section) Put64(b []byte, o binary.ByteOrder) int

func (*Section) PutData ¶

func (s *Section) PutData(b []byte)

func (*Section) PutRelocs ¶

func (s *Section) PutRelocs(b []byte, o binary.ByteOrder) int

func (*Section) PutUncompressedData ¶

func (s *Section) PutUncompressedData(b []byte)

func (*Section) UncompressedSize ¶

func (s *Section) UncompressedSize() uint64

type SectionHeader ¶

type SectionHeader struct {
	Name      string
	Seg       string
	Addr      uint64
	Size      uint64
	Offset    uint32
	Align     uint32
	Reloff    uint32
	Nreloc    uint32
	Flags     types.SectionFlag
	Reserved1 uint32
	Reserved2 uint32
	Reserved3 uint32 // only present if original was 64-bit
}

type Segment ¶

type Segment struct {
	SegmentHeader
	LoadBytes
	// 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) Copy ¶

func (s *Segment) Copy() *Segment

func (*Segment) CopyZeroed ¶

func (s *Segment) CopyZeroed() *Segment

func (*Segment) Data ¶

func (s *Segment) Data() ([]byte, error)

Data reads and returns the contents of the segment.

func (*Segment) LoadSize ¶

func (s *Segment) LoadSize(t *FileTOC) uint32

func (*Segment) Open ¶

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

Open returns a new ReadSeeker reading the segment.

func (*Segment) Put32 ¶

func (s *Segment) Put32(b []byte, o binary.ByteOrder) int

func (*Segment) Put64 ¶

func (s *Segment) Put64(b []byte, o binary.ByteOrder) int

func (*Segment) String ¶

func (s *Segment) String() string

func (*Segment) UncompressedSize ¶

func (s *Segment) UncompressedSize(t *FileTOC, align uint64) uint64

UncompressedSize returns the size of the segment with its sections uncompressed, ignoring its offset within the file. The returned size is rounded up to the power of two in align.

type SegmentHeader ¶

type SegmentHeader struct {
	types.LoadCmd
	Len       uint32
	Name      string
	Addr      uint64
	Memsz     uint64
	Offset    uint64
	Filesz    uint64
	Maxprot   types.VmProtection
	Prot      types.VmProtection
	Nsect     uint32
	Flag      types.SegFlag
	Firstsect uint32
}

A SegmentHeader is the header for a Mach-O 32-bit or 64-bit load segment command.

func (*SegmentHeader) String ¶

func (s *SegmentHeader) String() string

type SourceVersion ¶

type SourceVersion struct {
	LoadBytes
	types.SourceVersionCmd
	Version string
}

A SourceVersion represents a Mach-O source version.

func (*SourceVersion) String ¶ added in v1.0.4

func (s *SourceVersion) String() string

type SplitInfo ¶

type SplitInfo struct {
	LoadBytes
	types.SegmentSplitInfoCmd
	Offset  uint32
	Size    uint32
	Version uint8
	Offsets []uint64
}

func (*SplitInfo) String ¶ added in v1.0.9

func (s *SplitInfo) String() string

type SubClient ¶

type SubClient struct {
	LoadBytes
	types.SubClientCmd
	Name string
}

A SubClient is a Mach-O dynamic sub client command.

func (*SubClient) String ¶ added in v1.0.9

func (d *SubClient) String() string

type SubFramework ¶

type SubFramework struct {
	LoadBytes
	types.SubFrameworkCmd
	Framework string
}

func (*SubFramework) String ¶ added in v1.0.24

func (s *SubFramework) String() string

type Symbol ¶

type Symbol struct {
	Name  string
	Type  types.NType
	Sect  uint8
	Desc  types.NDescType
	Value uint64
}

A Symbol is a Mach-O 32-bit or 64-bit symbol table entry.

func (Symbol) String ¶ added in v1.0.24

func (s Symbol) String(m *File) string

type Symtab ¶

type Symtab struct {
	LoadBytes
	types.SymtabCmd
	Syms []Symbol
}

A Symtab represents a Mach-O symbol table command.

func (*Symtab) Copy ¶

func (s *Symtab) Copy() *Symtab

func (*Symtab) LoadSize ¶

func (s *Symtab) LoadSize(t *FileTOC) uint32

func (*Symtab) Put ¶

func (s *Symtab) Put(b []byte, o binary.ByteOrder) int

func (*Symtab) String ¶

func (s *Symtab) String() string

type UUID ¶

type UUID struct {
	LoadBytes
	types.UUIDCmd
	ID string
}

UUID represents a Mach-O uuid command.

func (*UUID) Copy ¶

func (s *UUID) Copy() *UUID

func (*UUID) LoadSize ¶

func (s *UUID) LoadSize(t *FileTOC) uint32

func (*UUID) Put ¶

func (s *UUID) Put(b []byte, o binary.ByteOrder) int

func (*UUID) String ¶

func (s *UUID) String() string

type UnixThread ¶

type UnixThread struct {
	LoadBytes
	types.UnixThreadCmd
	EntryPoint uint64
}

A UnixThread represents a Mach-O unix thread command.

func (*UnixThread) String ¶ added in v1.0.8

func (u *UnixThread) String() string

type UpwardDylib ¶

type UpwardDylib Dylib

A UpwardDylib represents a Mach-O load upward dylib command.

func (*UpwardDylib) String ¶ added in v1.0.9

func (d *UpwardDylib) String() string

type VersionMinMacOSX ¶ added in v1.0.9

type VersionMinMacOSX struct {
	LoadBytes
	types.VersionMinMacOSCmd
	Version string
	Sdk     string
}

VersionMinMacOSX build for MacOSX min OS version

func (*VersionMinMacOSX) String ¶ added in v1.0.9

func (v *VersionMinMacOSX) String() string

type VersionMinTvOS ¶ added in v1.0.9

type VersionMinTvOS struct {
	LoadBytes
	types.VersionMinIPhoneOSCmd
	Version string
	Sdk     string
}

VersionMinTvOS build for AppleTV min OS version

func (*VersionMinTvOS) String ¶ added in v1.0.9

func (v *VersionMinTvOS) String() string

type VersionMinWatchOS ¶ added in v1.0.9

type VersionMinWatchOS struct {
	LoadBytes
	types.VersionMinIPhoneOSCmd
	Version string
	Sdk     string
}

VersionMinWatchOS build for Watch min OS version

func (*VersionMinWatchOS) String ¶ added in v1.0.9

func (v *VersionMinWatchOS) String() string

type VersionMiniPhoneOS ¶ added in v1.0.9

type VersionMiniPhoneOS struct {
	LoadBytes
	types.VersionMinIPhoneOSCmd
	Version string
	Sdk     string
}

VersionMiniPhoneOS build for iPhoneOS min OS version

func (*VersionMiniPhoneOS) String ¶ added in v1.0.9

func (v *VersionMiniPhoneOS) String() string

type WeakDylib ¶

type WeakDylib Dylib

A WeakDylib represents a Mach-O load weak dynamic library command.

func (*WeakDylib) String ¶ added in v1.0.8

func (d *WeakDylib) String() string

Directories ¶

Path Synopsis
internal
obscuretestdata
Package obscuretestdata contains functionality used by tests to more easily work with testdata that must be obscured primarily due to golang.org/issue/34986.
Package obscuretestdata contains functionality used by tests to more easily work with testdata that must be obscured primarily due to golang.org/issue/34986.
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL