Objects in memory
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CF* objekte kom van CoreFoundation, wat meer as 50 klasse van objekte soos CFString
, CFNumber
of CFAllocator
bied.
Al hierdie klasse is instansies van die klas CFRuntimeClass
, wat wanneer dit aangeroep word, 'n indeks na die __CFRuntimeClassTable
teruggee. Die CFRuntimeClass is gedefinieer in CFRuntime.h:
Meeste van die data wat deur die ObjectiveC runtime gebruik word, sal tydens die uitvoering verander, daarom gebruik dit 'n paar seksies van die __DATA segment in geheue:
__objc_msgrefs
(message_ref_t
): Boodskap verwysings
__objc_ivar
(ivar
): Instansie veranderlikes
__objc_data
(...
): Veranderlike data
__objc_classrefs
(Class
): Klas verwysings
__objc_superrefs
(Class
): Superklas verwysings
__objc_protorefs
(protocol_t *
): Protokol verwysings
__objc_selrefs
(SEL
): Selektor verwysings
__objc_const
(...
): Klas r/o
data en ander (hopelik) konstante data
__objc_imageinfo
(version, flags
): Gebruik tydens beeld laai: Huidige weergawe 0
; Vlaggies spesifiseer voor-geoptimaliseerde GC ondersteuning, ens.
__objc_protolist
(protocol_t *
): Protokol lys
__objc_nlcatlist
(category_t
): Wysiger na Nie-Lui Kategoriene gedefinieer in hierdie binêre
__objc_catlist
(category_t
): Wysiger na Kategoriene gedefinieer in hierdie binêre
__objc_nlclslist
(classref_t
): Wysiger na Nie-Lui Objective-C klasse gedefinieer in hierdie binêre
__objc_classlist
(classref_t
): Wysigers na alle Objective-C klasse gedefinieer in hierdie binêre
Dit gebruik ook 'n paar seksies in die __TEXT
segment om konstante waardes te stoor as dit nie moontlik is om in hierdie seksie te skryf nie:
__objc_methname
(C-String): Metode name
__objc_classname
(C-String): Klas name
__objc_methtype
(C-String): Metode tipes
Objective-C gebruik 'n paar mangeling om selektor en veranderlike tipes van eenvoudige en komplekse tipes te kodeer:
Primitive tipes gebruik die eerste letter van die tipe i
vir int
, c
vir char
, l
vir long
... en gebruik die hoofletter in geval dit ongetekend is (L
vir unsigned Long
).
Ander datatipes waarvan die letters gebruik word of spesiaal is, gebruik ander letters of simbole soos q
vir long long
, b
vir bitfields
, B
vir booleans
, #
vir classes
, @
vir id
, *
vir char pointers
, ^
vir generiese pointers
en ?
vir undefined
.
Arrays, strukture en unies gebruik [
, {
en (
Die selektor sou wees processString:withOptions:andError:
id
word gekodeer as @
char *
word gekodeer as *
Die volledige tipe kodering vir die metode is:
Terug tipe (NSString *
): Gecodeer as @
met lengte 24
self
(objek instansie): Gecodeer as @
, by offset 0
_cmd
(selektor): Gecodeer as :
, by offset 8
Eerste argument (char * input
): Gecodeer as *
, by offset 16
Tweede argument (NSDictionary * options
): Gecodeer as @
, by offset 20
Derde argument (NSError ** error
): Gecodeer as ^@
, by offset 24
Met die selektor + die kodering kan jy die metode herbou.
Klasse in Objective-C is 'n struktuur met eienskappe, metode wysers... Dit is moontlik om die struktuur objc_class
in die bron kode te vind:
Hierdie klas gebruik 'n paar bits van die isa-veld om inligting oor die klas aan te dui.
Dan het die struktuur 'n wysiger na die struktuur class_ro_t
wat op skyf gestoor is en wat eienskappe van die klas bevat soos sy naam, basismetodes, eienskappe en instansie veranderlikes.
Tydens uitvoering word 'n addisionele struktuur class_rw_t
gebruik wat wysigers bevat wat verander kan word soos metodes, protokolle, eienskappe...
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)