objc

package
v1.1.193 Latest Latest
Warning

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

Go to latest
Published: Mar 14, 2024 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DyldCategoriesOptimized    ImageInfoFlag = 1 << 0 // categories were optimized by dyld
	SupportsGC                 ImageInfoFlag = 1 << 1 // image supports GC
	RequiresGC                 ImageInfoFlag = 1 << 2 // image requires GC
	OptimizedByDyld            ImageInfoFlag = 1 << 3 // image is from an optimized shared cache
	SignedClassRO              ImageInfoFlag = 1 << 4 // class_ro_t pointers are signed
	IsSimulated                ImageInfoFlag = 1 << 5 // image compiled for a simulator platform
	HasCategoryClassProperties ImageInfoFlag = 1 << 6 // class properties in category_t

	// OptimizedByDyldClosure is currently set by dyld, but we don't use it
	// anymore. Instead use
	// _dyld_objc_notify_mapped_info::dyldObjCRefsOptimized.
	// Once dyld stops setting it, it will be unused.
	OptimizedByDyldClosure ImageInfoFlag = 1 << 7 // dyld (not the shared cache) optimized this.

	// 1 byte Swift unstable ABI version number
	SwiftUnstableVersionMaskShift = 8
	SwiftUnstableVersionMask      = 0xff << SwiftUnstableVersionMaskShift

	// 2 byte Swift stable ABI version number
	SwiftStableVersionMaskShift = 16
	SwiftStableVersionMask      = 0xffff << SwiftStableVersionMaskShift
)
View Source
const (
	METHOD_LIST_FLAGS_MASK uint32 = 0xffff0003
	// The size is bits 2 through 16 of the entsize field
	// The low 2 bits are uniqued/sorted as above.  The upper 16-bits
	// are reserved for other flags
	METHOD_LIST_SIZE_MASK uint32 = 0x0000FFFC
)
View Source
const (
	FAST_IS_SWIFT_LEGACY = 1 << 0 // < 5
	FAST_IS_SWIFT_STABLE = 1 << 1 // 5.X
	FAST_HAS_DEFAULT_RR  = 1 << 2
	IsSwiftPreStableABI  = 0x1
)
View Source
const (
	FAST_DATA_MASK  = 0xfffffffc
	FAST_FLAGS_MASK = 0x00000003

	FAST_DATA_MASK64_IPHONE = 0x0000007ffffffff8
	FAST_DATA_MASK64        = 0x00007ffffffffff8
	FAST_FLAGS_MASK64       = 0x0000000000000007
	FAST_IS_RW_POINTER64    = 0x8000000000000000
)
View Source
const (
	// Values for protocol_t->flags
	PROTOCOL_FIXED_UP_2   = (1 << 31) // must never be set by compiler
	PROTOCOL_FIXED_UP_1   = (1 << 30) // must never be set by compiler
	PROTOCOL_IS_CANONICAL = (1 << 29) // must never be set by compiler
	// Bits 0..15 are reserved for Swift's use.
	PROTOCOL_FIXED_UP_MASK = (PROTOCOL_FIXED_UP_1 | PROTOCOL_FIXED_UP_2)
)
View Source
const IsDyldPreoptimized = 1 << 7

Variables

This section is empty.

Functions

func CutType

func CutType(typStr string) (string, string, bool)

Types

type CFString

type CFString struct {
	Name    string
	ISA     string
	Address uint64
	Class   *Class
	CFString64Type
}

CFString object in a 64-bit MachO file

type CFString64Type

type CFString64Type struct {
	IsaVMAddr uint64 // class64_t * (64-bit pointer)
	Info      uint64 // flag bits
	Data      uint64 // char * (64-bit pointer)
	Length    uint64 // number of non-NULL characters in above
}

CFString64Type object in a 64-bit MachO file

type Category

type Category struct {
	Name            string
	VMAddr          uint64
	Class           *Class
	Protocols       []Protocol
	ClassMethods    []Method
	InstanceMethods []Method
	Properties      []Property
	CategoryT
}

Category represents an Objective-C category.

func (*Category) String

func (c *Category) String() string

func (*Category) Verbose

func (c *Category) Verbose() string

func (*Category) WithAddrs

func (c *Category) WithAddrs() string

type CategoryT

type CategoryT struct {
	NameVMAddr               uint64
	ClsVMAddr                uint64
	InstanceMethodsVMAddr    uint64
	ClassMethodsVMAddr       uint64
	ProtocolsVMAddr          uint64
	InstancePropertiesVMAddr uint64
}

type Class

type Class struct {
	Name                  string
	SuperClass            string
	Isa                   string
	InstanceMethods       []Method
	ClassMethods          []Method
	Ivars                 []Ivar
	Props                 []Property
	Protocols             []Protocol
	ClassPtr              uint64
	IsaVMAddr             uint64
	SuperclassVMAddr      uint64
	MethodCacheBuckets    uint64
	MethodCacheProperties uint64
	DataVMAddr            uint64
	IsSwiftLegacy         bool
	IsSwiftStable         bool
	ReadOnlyData          ClassRO64
}

func (*Class) IsSwift

func (c *Class) IsSwift() bool

IsSwift returns true if the class is a Swift class.

func (*Class) String

func (c *Class) String() string

func (*Class) Verbose

func (c *Class) Verbose() string

func (*Class) WithAddrs

func (c *Class) WithAddrs() string

type ClassRO

type ClassRO struct {
	Flags         ClassRoFlags
	InstanceStart uint32
	InstanceSize  uint32

	IvarLayoutVMAddr     uint32
	NameVMAddr           uint32
	BaseMethodsVMAddr    uint32
	BaseProtocolsVMAddr  uint32
	IvarsVMAddr          uint32
	WeakIvarLayoutVMAddr uint32
	BasePropertiesVMAddr uint32
	// contains filtered or unexported fields
}

type ClassRO64

type ClassRO64 struct {
	Flags         ClassRoFlags
	InstanceStart uint32
	InstanceSize  uint64
	// _                    uint32
	IvarLayoutVMAddr     uint64
	NameVMAddr           uint64
	BaseMethodsVMAddr    uint64
	BaseProtocolsVMAddr  uint64
	IvarsVMAddr          uint64
	WeakIvarLayoutVMAddr uint64
	BasePropertiesVMAddr uint64
}

type ClassRoFlags

type ClassRoFlags uint32
const (
	// class is a metaclass
	RO_META ClassRoFlags = (1 << 0)
	// class is a root class
	RO_ROOT ClassRoFlags = (1 << 1)
	// class has .cxx_construct/destruct implementations
	RO_HAS_CXX_STRUCTORS ClassRoFlags = (1 << 2)
	// class has +load implementation
	RO_HAS_LOAD_METHOD ClassRoFlags = (1 << 3)
	// class has visibility=hidden set
	RO_HIDDEN ClassRoFlags = (1 << 4)
	// class has attributeClassRoFlags = (objc_exception): OBJC_EHTYPE_$_ThisClass is non-weak
	RO_EXCEPTION ClassRoFlags = (1 << 5)
	// class has ro field for Swift metadata initializer callback
	RO_HAS_SWIFT_INITIALIZER ClassRoFlags = (1 << 6)
	// class compiled with ARC
	RO_IS_ARC ClassRoFlags = (1 << 7)
	// class has .cxx_destruct but no .cxx_construct ClassRoFlags = (with RO_HAS_CXX_STRUCTORS)
	RO_HAS_CXX_DTOR_ONLY ClassRoFlags = (1 << 8)
	// class is not ARC but has ARC-style weak ivar layout
	RO_HAS_WEAK_WITHOUT_ARC ClassRoFlags = (1 << 9)
	// class does not allow associated objects on instances
	RO_FORBIDS_ASSOCIATED_OBJECTS ClassRoFlags = (1 << 10)

	// class is in an unloadable bundle - must never be set by compiler
	RO_FROM_BUNDLE ClassRoFlags = (1 << 29)
	// class is unrealized future class - must never be set by compiler
	RO_FUTURE ClassRoFlags = (1 << 30)
	// class is realized - must never be set by compiler
	RO_REALIZED ClassRoFlags = (1 << 31)
)

func (ClassRoFlags) HasCxxStructors

func (f ClassRoFlags) HasCxxStructors() bool

func (ClassRoFlags) HasFuture

func (f ClassRoFlags) HasFuture() bool

func (ClassRoFlags) IsMeta

func (f ClassRoFlags) IsMeta() bool

func (ClassRoFlags) IsRoot

func (f ClassRoFlags) IsRoot() bool

type Entry

type Entry int64

func (Entry) ImageIndex

func (e Entry) ImageIndex() uint16

func (Entry) MethodListOffset

func (e Entry) MethodListOffset() int64

func (Entry) String

func (e Entry) String() string

type EntryList

type EntryList struct {
	Entsize uint32
	Count   uint32
}

func (EntryList) String

func (el EntryList) String() string

type ImageInfo

type ImageInfo struct {
	Version uint32
	Flags   ImageInfoFlag
}

func (ImageInfo) HasSwift

func (i ImageInfo) HasSwift() bool

func (ImageInfo) IsDyldPreoptimized

func (i ImageInfo) IsDyldPreoptimized() bool

type ImageInfoFlag

type ImageInfoFlag uint32

func (ImageInfoFlag) DyldCategoriesOptimized

func (f ImageInfoFlag) DyldCategoriesOptimized() bool

DyldCategoriesOptimized

Indicates that dyld preattached categories from this image in the shared
cache and we don't need to scan those categories ourselves. Note: this bit
used to be used for the IsReplacement flag used for Fix & Continue. That
usage is obsolete.

func (ImageInfoFlag) HasCategoryClassProperties

func (f ImageInfoFlag) HasCategoryClassProperties() bool

HasClassProperties

New ABI: category_t.classProperties fields are present.
Old ABI: Set by some compilers. Not used by the runtime.

func (ImageInfoFlag) IsSimulated

func (f ImageInfoFlag) IsSimulated() bool

IsSimulated

Image was compiled for a simulator platform. Not used by the runtime.

func (ImageInfoFlag) List

func (f ImageInfoFlag) List() []string

func (ImageInfoFlag) OptimizedByDyld

func (f ImageInfoFlag) OptimizedByDyld() bool

OptimizedByDyld

Assorted metadata precooked in the dyld shared cache.
Never set for images outside the shared cache file itself.

func (ImageInfoFlag) OptimizedByDyldClosure

func (f ImageInfoFlag) OptimizedByDyldClosure() bool

func (ImageInfoFlag) RequiresGC

func (f ImageInfoFlag) RequiresGC() bool

RequiresGC

Framework: GC is required.

func (ImageInfoFlag) SignedClassRO

func (f ImageInfoFlag) SignedClassRO() bool

func (ImageInfoFlag) String

func (f ImageInfoFlag) String() string

func (ImageInfoFlag) SupportsGC

func (f ImageInfoFlag) SupportsGC() bool

SupportsGC

App: GC is required. Framework: GC is supported but not required.

func (ImageInfoFlag) SwiftVersion

func (f ImageInfoFlag) SwiftVersion() string

type ImpCacheEntryV1

type ImpCacheEntryV1 struct {
	SelOffset uint32
	ImpOffset uint32
}

type ImpCacheEntryV2

type ImpCacheEntryV2 uint64

func (ImpCacheEntryV2) GetImpOffset

func (e ImpCacheEntryV2) GetImpOffset() int64

func (ImpCacheEntryV2) GetSelOffset

func (e ImpCacheEntryV2) GetSelOffset() uint64

type ImpCacheHeaderV1

type ImpCacheHeaderV1 struct {
	FallbackClassOffset int32
	Info                uint32
}

func (ImpCacheHeaderV1) BitOne

func (p ImpCacheHeaderV1) BitOne() bool

func (ImpCacheHeaderV1) CacheMask

func (p ImpCacheHeaderV1) CacheMask() uint32

func (ImpCacheHeaderV1) CacheShift

func (p ImpCacheHeaderV1) CacheShift() uint32

func (ImpCacheHeaderV1) Capacity

func (p ImpCacheHeaderV1) Capacity() uint32

func (ImpCacheHeaderV1) HasInlines

func (p ImpCacheHeaderV1) HasInlines() bool

func (ImpCacheHeaderV1) Occupied

func (p ImpCacheHeaderV1) Occupied() uint32

func (ImpCacheHeaderV1) String

func (p ImpCacheHeaderV1) String() string

type ImpCacheHeaderV2

type ImpCacheHeaderV2 struct {
	FallbackClassOffset int64
	Info                uint64
}

func (ImpCacheHeaderV2) BitOne

func (p ImpCacheHeaderV2) BitOne() bool

func (ImpCacheHeaderV2) CacheMask

func (p ImpCacheHeaderV2) CacheMask() uint32

func (ImpCacheHeaderV2) CacheShift

func (p ImpCacheHeaderV2) CacheShift() uint32

func (ImpCacheHeaderV2) Capacity

func (p ImpCacheHeaderV2) Capacity() uint32

func (ImpCacheHeaderV2) HasInlines

func (p ImpCacheHeaderV2) HasInlines() bool

func (ImpCacheHeaderV2) Occupied

func (p ImpCacheHeaderV2) Occupied() uint32

func (ImpCacheHeaderV2) String

func (p ImpCacheHeaderV2) String() string

type ImpCacheV1

type ImpCacheV1 struct {
	ImpCacheHeaderV1
	Entries []ImpCacheEntryV1
}

type ImpCacheV2

type ImpCacheV2 struct {
	ImpCacheHeaderV2
	Entries []ImpCacheEntryV2
}

type IntObj

type IntObj struct {
	ISA          uint64
	EncodingAddr uint64
	Number       uint64
}

type Ivar

type Ivar struct {
	Name   string
	Type   string
	Offset uint32
	IvarT
}

func (*Ivar) String

func (i *Ivar) String() string

func (*Ivar) Verbose

func (i *Ivar) Verbose() string

func (*Ivar) WithAddrs

func (i *Ivar) WithAddrs() string

type IvarList

type IvarList struct {
	EntSize uint32
	Count   uint32
}

type IvarT

type IvarT struct {
	Offset      uint64 // uint32_t*  (uint64_t* on x86_64)
	NameVMAddr  uint64 // const char*
	TypesVMAddr uint64 // const char*
	Alignment   uint32
	Size        uint32
}

type MLFlags

type MLFlags uint32
const (
	METHOD_LIST_IS_UNIQUED MLFlags = 1
	METHOD_LIST_IS_SORTED  MLFlags = 2
	METHOD_LIST_FIXED_UP   MLFlags = 3
)

type MLKind

type MLKind uint32

type Method

type Method struct {
	NameVMAddr  uint64 // & SEL
	TypesVMAddr uint64 // & const char *
	ImpVMAddr   uint64 // & IMP

	// We also need to know where the reference to the nameVMAddr was
	// This is so that we know how to rebind that location
	NameLocationVMAddr uint64
	Name               string
	Types              string
}

func (*Method) ArgumentType

func (m *Method) ArgumentType(index int) string

func (*Method) NumberOfArguments

func (m *Method) NumberOfArguments() int

NumberOfArguments returns the number of method arguments

func (*Method) ReturnType

func (m *Method) ReturnType() string

ReturnType returns the method's return type

type MethodList

type MethodList struct {
	EntSizeAndFlags uint32
	Count           uint32
}

func (MethodList) EntSize

func (ml MethodList) EntSize() uint32

func (MethodList) FixedUp

func (ml MethodList) FixedUp() bool

func (MethodList) Flags

func (ml MethodList) Flags() MLFlags

func (MethodList) IsUniqued

func (ml MethodList) IsUniqued() bool

func (MethodList) Sorted

func (ml MethodList) Sorted() bool

func (MethodList) String

func (ml MethodList) String() string

func (MethodList) UsesDirectOffsetsToSelectors

func (ml MethodList) UsesDirectOffsetsToSelectors() bool

func (MethodList) UsesRelativeOffsets

func (ml MethodList) UsesRelativeOffsets() bool

type MethodT

type MethodT struct {
	NameVMAddr  uint64 // SEL
	TypesVMAddr uint64 // const char *
	ImpVMAddr   uint64 // IMP
}

type ObjcClass64

type ObjcClass64 struct {
	IsaVMAddr              uint64
	SuperclassVMAddr       uint64
	MethodCacheBuckets     uint64
	MethodCacheProperties  uint64
	DataVMAddrAndFastFlags uint64
}

type ObjcClassT

type ObjcClassT struct {
	IsaVMAddr              uint32
	SuperclassVMAddr       uint32
	MethodCacheBuckets     uint32
	MethodCacheProperties  uint32
	DataVMAddrAndFastFlags uint32
}

type OptOffsets

type OptOffsets struct {
	MethodNameStart     uint64
	MethodNameEnd       uint64
	InlinedMethodsStart uint64
	InlinedMethodsEnd   uint64
}

type OptOffsets2

type OptOffsets2 struct {
	Version             uint64
	MethodNameStart     uint64
	MethodNameEnd       uint64
	InlinedMethodsStart uint64
	InlinedMethodsEnd   uint64
}

type Property

type Property struct {
	PropertyT
	Name              string
	EncodedAttributes string
}

func (*Property) Attributes

func (p *Property) Attributes() string

func (*Property) Type

func (p *Property) Type() string

type PropertyList

type PropertyList struct {
	EntSize uint32
	Count   uint32
}

type PropertyT

type PropertyT struct {
	NameVMAddr       uint64
	AttributesVMAddr uint64
}

type Protocol

type Protocol struct {
	Name                    string
	Ptr                     uint64
	Isa                     *Class
	Prots                   []Protocol
	InstanceMethods         []Method
	InstanceProperties      []Property
	ClassMethods            []Method
	OptionalInstanceMethods []Method
	OptionalClassMethods    []Method
	ExtendedMethodTypes     string
	DemangledName           string
	ProtocolT
}

func (*Protocol) String

func (p *Protocol) String() string

func (*Protocol) Verbose

func (p *Protocol) Verbose() string

func (*Protocol) WithAddrs

func (p *Protocol) WithAddrs() string

type ProtocolList

type ProtocolList struct {
	Count     uint64
	Protocols []uint64
}

type ProtocolT

type ProtocolT struct {
	IsaVMAddr                     uint64
	NameVMAddr                    uint64
	ProtocolsVMAddr               uint64
	InstanceMethodsVMAddr         uint64
	ClassMethodsVMAddr            uint64
	OptionalInstanceMethodsVMAddr uint64
	OptionalClassMethodsVMAddr    uint64
	InstancePropertiesVMAddr      uint64
	Size                          uint32
	Flags                         uint32
	// Fields below this point are not always present on disk.
	ExtendedMethodTypesVMAddr uint64
	DemangledNameVMAddr       uint64
	ClassPropertiesVMAddr     uint64
}

type RelativeMethodT

type RelativeMethodT struct {
	NameOffset  int32 // SEL
	TypesOffset int32 // const char *
	ImpOffset   int32 // IMP
}

type Selector

type Selector struct {
	VMAddr uint64
	Name   string
}

type Stub

type Stub struct {
	Name        string
	SelectorRef uint64
}

type SwiftClassMetadata

type SwiftClassMetadata struct {
	ObjcClassT
	SwiftClassFlags uint32
}

type SwiftClassMetadata64

type SwiftClassMetadata64 struct {
	ObjcClass64
	SwiftClassFlags uint64
}

type Toc

type Toc struct {
	ClassList        uint64
	NonLazyClassList uint64
	CatList          uint64
	NonLazyCatList   uint64
	ProtoList        uint64
	ClassRefs        uint64
	SuperRefs        uint64
	SelRefs          uint64
	Stubs            uint64
}

func (Toc) String

func (i Toc) String() string

Jump to

Keyboard shortcuts

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