Objects in memory
Dowiedz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Dowiedz się i praktykuj Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
CFRuntimeClass
Obiekty CF* pochodzą z CoreFoundation, która dostarcza ponad 50 klas obiektów, takich jak CFString
, CFNumber
lub CFAllocatior
.
Wszystkie te klasy są instancjami klasy CFRuntimeClass
, która po wywołaniu zwraca indeks do __CFRuntimeClassTable
. CFRuntimeClass jest zdefiniowany w CFRuntime.h:
Objective-C
Używane sekcje pamięci
Większość danych używanych przez czas wykonania ObjectiveC będzie się zmieniać podczas wykonywania, dlatego korzysta z niektórych sekcji z segmentu __DATA w pamięci:
__objc_msgrefs
(message_ref_t
): Referencje wiadomości__objc_ivar
(ivar
): Zmienne instancji__objc_data
(...
): Dane mutowalne__objc_classrefs
(Class
): Referencje klasy__objc_superrefs
(Class
): Referencje nadklasy__objc_protorefs
(protocol_t *
): Referencje protokołu__objc_selrefs
(SEL
): Referencje selektora__objc_const
(...
): Dane klasyr/o
i inne (obydane) dane stałe__objc_imageinfo
(version, flags
): Używane podczas ładowania obrazu: Wersja obecnie0
; Flagi określają wsparcie dla preoptymalizacji GC, itp.__objc_protolist
(protocol_t *
): Lista protokołów__objc_nlcatlist
(category_t
): Wskaźnik na kategorie Non-Lazy zdefiniowane w tym pliku binarnym__objc_catlist
(category_t
): Wskaźnik na kategorie zdefiniowane w tym pliku binarnym__objc_nlclslist
(classref_t
): Wskaźnik na nie-leniwie zdefiniowane klasy Objective-C w tym pliku binarnym__objc_classlist
(classref_t
): Wskaźniki do wszystkich klas Objective-C zdefiniowanych w tym pliku binarnym
Wykorzystuje także kilka sekcji w segmencie __TEXT
do przechowywania stałych wartości, których nie można zapisać w tej sekcji:
__objc_methname
(Ciąg znaków): Nazwy metod__objc_classname
(Ciąg znaków): Nazwy klas__objc_methtype
(Ciąg znaków): Typy metod
Kodowanie typów
Objective-C używa pewnego rodzaju kodowania do zakodowania selektorów i typów zmiennych prostych i złożonych:
Typy podstawowe używają pierwszej litery typu, np.
i
dlaint
,c
dlachar
,l
dlalong
... i używa wielkiej litery w przypadku typu bez znaku (L
dlaunsigned Long
).Inne typy danych, których litery są używane lub są specjalne, używają innych liter lub symboli, np.
q
dlalong long
,b
dlabitów
,B
dlabooleanów
,#
dlaklas
,@
dlaid
,*
dlawskaźników na znaki
,^
dla ogólnychwskaźników
i?
dlaniezdefiniowanych
.Tablice, struktury i unie używają
[
,{
i(
Przykładowe Deklaracje Metod
Selektor będzie processString:withOptions:andError:
Kodowanie typu
id
jest zakodowany jako@
char *
jest zakodowany jako*
Pełne kodowanie typu dla metody to:
Szczegółowy rozkład
Typ zwracany (
NSString *
): Zakodowany jako@
o długości 24self
(instancja obiektu): Zakodowany jako@
, na przesunięciu 0_cmd
(selektor): Zakodowany jako:
, na przesunięciu 8Pierwszy argument (
char * input
): Zakodowany jako*
, na przesunięciu 16Drugi argument (
NSDictionary * options
): Zakodowany jako@
, na przesunięciu 20Trzeci argument (
NSError ** error
): Zakodowany jako^@
, na przesunięciu 24
Dzięki selektorowi i kodowaniu można odtworzyć metodę.
Klasy
Klasy w Objective-C to struktura z właściwościami, wskaźnikami do metod... Można znaleźć strukturę objc_class
w kodzie źródłowym:
Ta klasa używa niektórych bitów pola isa do wskazywania informacji o klasie.
Następnie struktura ma wskaźnik do struktury class_ro_t
przechowywanej na dysku, która zawiera atrybuty klasy, takie jak jej nazwa, metody podstawowe, właściwości i zmienne instancji.
Podczas działania programu dodatkowa struktura class_rw_t
jest używana, zawierająca wskaźniki, które mogą być zmieniane, takie jak metody, protokoły, właściwości...
Last updated