Objects in memory
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CFRuntimeClass
CF* ऑब्जेक्ट CoreFoundation से आते हैं, जो CFString
, CFNumber
या CFAllocator
जैसे 50 से अधिक ऑब्जेक्ट क्लास प्रदान करता है।
इन सभी क्लासों के उदाहरण CFRuntimeClass
क्लास के होते हैं, जिसे कॉल करने पर यह __CFRuntimeClassTable
का एक इंडेक्स लौटाता है। CFRuntimeClass को CFRuntime.h में परिभाषित किया गया है:
Objective-C
Memory sections used
Most of the data used by ObjectiveC runtime will change during the execution, therefore it uses some sections from the __DATA segment in memory:
__objc_msgrefs
(message_ref_t
): संदेश संदर्भ__objc_ivar
(ivar
): उदाहरण चर__objc_data
(...
): परिवर्तनीय डेटा__objc_classrefs
(Class
): वर्ग संदर्भ__objc_superrefs
(Class
): सुपरक्लास संदर्भ__objc_protorefs
(protocol_t *
): प्रोटोकॉल संदर्भ__objc_selrefs
(SEL
): चयनकर्ता संदर्भ__objc_const
(...
): वर्गr/o
डेटा और अन्य (उम्मीद है) स्थिर डेटा__objc_imageinfo
(version, flags
): छवि लोड के दौरान उपयोग किया जाता है: वर्तमान संस्करण0
; ध्वज पूर्व-ऑप्टिमाइज़्ड GC समर्थन आदि निर्दिष्ट करते हैं।__objc_protolist
(protocol_t *
): प्रोटोकॉल सूची__objc_nlcatlist
(category_t
): इस बाइनरी में परिभाषित नॉन-लेज़ी श्रेणियों के लिए पॉइंटर__objc_catlist
(category_t
): इस बाइनरी में परिभाषित श्रेणियों के लिए पॉइंटर__objc_nlclslist
(classref_t
): इस बाइनरी में परिभाषित नॉन-लेज़ी ऑब्जेक्टिव-सी वर्गों के लिए पॉइंटर__objc_classlist
(classref_t
): इस बाइनरी में परिभाषित सभी ऑब्जेक्टिव-सी वर्गों के लिए पॉइंटर
It also uses a few sections in the __TEXT
segment to store constan values of it's not possible to write in this section:
__objc_methname
(C-String): विधि नाम__objc_classname
(C-String): वर्ग नाम__objc_methtype
(C-String): विधि प्रकार
Type Encoding
Objective-c uses some mangling to encode selector and variable types of simple and complex types:
Primitive types use their first letter of the type
i
forint
,c
forchar
,l
forlong
... and uses the capital letter in case it's unsigned (L
forunsigned Long
).Other data types whose letters are used or are special, use other letters or symbols like
q
forlong long
,b
forbitfields
,B
forbooleans
,#
forclasses
,@
forid
,*
forchar pointers
,^
for genericpointers
and?
forundefined
.Arrays, structures and unions use
[
,{
and(
Example Method Declaration
चुनावकर्ता होगा processString:withOptions:andError:
प्रकार एन्कोडिंग
id
को@
के रूप में एन्कोड किया गया हैchar *
को*
के रूप में एन्कोड किया गया है
विधि के लिए पूर्ण प्रकार एन्कोडिंग है:
विस्तृत विश्लेषण
रिटर्न प्रकार (
NSString *
):@
के रूप में एन्कोडेड, लंबाई 24self
(ऑब्जेक्ट उदाहरण):@
के रूप में एन्कोडेड, ऑफसेट 0 पर_cmd
(सेलेक्टर)::
के रूप में एन्कोडेड, ऑफसेट 8 परपहला तर्क (
char * input
):*
के रूप में एन्कोडेड, ऑफसेट 16 परदूसरा तर्क (
NSDictionary * options
):@
के रूप में एन्कोडेड, ऑफसेट 20 परतीसरा तर्क (
NSError ** error
):^@
के रूप में एन्कोडेड, ऑफसेट 24 पर
सेलेक्टर + एन्कोडिंग के साथ आप विधि को पुनर्निर्माण कर सकते हैं।
क्लासेस
Objective-C में क्लास एक संरचना है जिसमें प्रॉपर्टीज, मेथड पॉइंटर्स... शामिल हैं। आप स्रोत कोड में संरचना objc_class
को ढूंढना संभव है:
यह क्लास isa फ़ील्ड के कुछ बिट्स का उपयोग क्लास के बारे में कुछ जानकारी इंगित करने के लिए करती है।
फिर, स्ट्रक्चर में डिस्क पर संग्रहीत class_ro_t
स्ट्रक्चर का एक पॉइंटर होता है, जिसमें क्लास के गुण जैसे इसका नाम, बेस मेथड्स, प्रॉपर्टीज और इंस्टेंस वेरिएबल्स होते हैं।
रनटाइम के दौरान, एक अतिरिक्त स्ट्रक्चर class_rw_t
का उपयोग किया जाता है जिसमें पॉइंटर्स होते हैं जिन्हें बदला जा सकता है जैसे मेथड्स, प्रोटोकॉल्स, प्रॉपर्टीज...
Last updated