Objects in memory
AWS Hacking'i öğrenin ve uygulayın: HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve uygulayın:
HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
CFRuntimeClass
CF* nesneleri CoreFoundation'dan gelir ve CFString
, CFNumber
veya CFAllocatior
gibi 50'den fazla nesne sınıfı sağlar.
Tüm bu sınıflar, CFRuntimeClass
sınıfının örnekleridir ve çağrıldığında __CFRuntimeClassTable
'a bir dizin döndürür. CFRuntimeClass, CFRuntime.h'de tanımlanmıştır.
Objective-C
Kullanılan Bellek Bölümleri
ObjectiveC çalışma zamanı tarafından kullanılan verilerin çoğu yürütme sırasında değişeceğinden, bellekte __DATA segmentinden bazı bölümleri kullanır:
__objc_msgrefs
(message_ref_t
): Mesaj referansları__objc_ivar
(ivar
): Örnek değişkenler__objc_data
(...
): Değiştirilebilir veri__objc_classrefs
(Class
): Sınıf referansları__objc_superrefs
(Class
): Üst sınıf referansları__objc_protorefs
(protocol_t *
): Protokol referansları__objc_selrefs
(SEL
): Seçici referansları__objc_const
(...
): Sınıfr/o
verileri ve diğer (umuyoruz ki) sabit veriler__objc_imageinfo
(version, flags
): Görüntü yükleme sırasında kullanılır: Şu anda0
sürüm; Bayraklar önoptimize edilmiş GC desteğini belirtir, vb.__objc_protolist
(protocol_t *
): Protokol listesi__objc_nlcatlist
(category_t
): Bu ikili dosyada tanımlanan Tembel Olmayan Kategorilere işaretçi__objc_catlist
** (category_t
): Bu ikili dosyada tanımlanan Kategorilere işaretçi__objc_nlclslist
(classref_t
): Bu ikili dosyada tanımlanan Tembel Olmayan Objective-C sınıflarına işaretçi__objc_classlist
(classref_t
): Bu ikili dosyada tanımlanan tüm Objective-C sınıflarına işaretçiler
Ayrıca, sabit değerleri saklamak için __TEXT
segmentinde birkaç bölüm daha kullanır:
__objc_methname
(C-String): Yöntem adları__objc_classname
(C-String): Sınıf adları__objc_methtype
(C-String): Yöntem tipleri
Tür Kodlaması
Objective-C, basit ve karmaşık tiplerin seçici ve değişken tiplerini kodlamak için bazı karıştırma kullanır:
İlkel tipler, tipin ilk harfini kullanır
i
içinint
,c
içinchar
,l
içinlong
... ve büyük harf kullanır işaretli ise (L
içinunsigned Long
).Diğer veri tipleri, harfleri kullanılan veya özel olanlar, diğer harfler veya semboller kullanır, örneğin
q
içinlong long
,b
içinbit alanları
,B
içinbooleanlar
,#
içinsınıflar
,@
içinid
,*
içinchar işaretçileri
,^
için genelişaretçiler
ve?
içintanımsız
.Diziler, yapılar ve birlikler
[
,{
ve(
kullanır
Örnek Yöntem Bildirimi
Seçici processString:withOptions:andError:
olacaktır.
Tür Kodlaması
id
@
olarak kodlanırchar *
*
olarak kodlanır
Yöntemin tam tür kodlaması:
Detaylı Açıklama
Dönüş Türü (
NSString *
):@
olarak kodlanmış, uzunluğu 24self
(nesne örneği):@
olarak kodlanmış, ofset 0'da_cmd
(seçici)::
olarak kodlanmış, ofset 8'deİlk argüman (
char * input
):*
olarak kodlanmış, ofset 16'daİkinci argüman (
NSDictionary * options
):@
olarak kodlanmış, ofset 20'deÜçüncü argüman (
NSError ** error
):^@
olarak kodlanmış, ofset 24'te
Seçici + kodlama ile yöntemi yeniden oluşturabilirsiniz.
Sınıflar
Objective-C'deki sınıflar, özellikler, yöntem işaretçileri olan bir yapıdır. objc_class
yapısını kaynak kodunda bulmak mümkündür:
Bu sınıf, sınıf hakkında bazı bilgileri göstermek için isa alanının bazı bitlerini kullanır.
Daha sonra, struct, sınıfın adını, temel yöntemleri, özellikleri ve örnek değişkenleri gibi sınıfın özelliklerini içeren diske kaydedilmiş class_ro_t
yapısına bir işaretçi içerir.
Çalışma zamanında, değiştirilebilen yöntemler, protokoller, özellikler gibi işaretçiler içeren ek bir yapı olan class_rw_t
kullanılır...
Last updated