Objects in memory
AWS हैकिंग सीखें और प्रैक्टिस करें:HackTricks प्रशिक्षण AWS रेड टीम एक्सपर्ट (ARTE) GCP हैकिंग सीखें और प्रैक्टिस करें: HackTricks प्रशिक्षण GCP रेड टीम एक्सपर्ट (GRTE)
CFRuntimeClass
CF* ऑब्जेक्ट्स कोर फाउंडेशन से आते हैं, जो CFString
, CFNumber
या CFAllocatior
जैसे 50 से अधिक ऑब्जेक्ट्स की कक्षाएँ प्रदान करता है।
ये सभी कक्षाएँ CFRuntimeClass
के उदाहरण हैं, जो जब कॉल किया जाता है तो यह __CFRuntimeClassTable
के लिए एक सूची लौटाता है। CFRuntimeClass CFRuntime.h में परिभाषित है:
Objective-C
उद्देश्य-सी
उपयोग किए जाने वाले मेमोरी खंड
ObjectiveC रनटाइम द्वारा उपयोग किए जाने वाले अधिकांश डेटा क्रियान्वयन के दौरान बदल जाएगा, इसलिए यह मेमोरी में __DATA सेगमेंट से कुछ खंडों का उपयोग करता है:
__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
; ध्वज पूर्व-अनुकूलित जीसी समर्थन इत्यादि निर्दिष्ट करते हैं।__objc_protolist
(protocol_t *
): प्रोटोकॉल सूची__objc_nlcatlist
(category_t
): इस बाइनरी में परिभाषित गुणसूची न आलसी श्रेणियों के पॉइंटर__objc_catlist
(category_t
): इस बाइनरी में परिभाषित श्रेणियों के पॉइंटर__objc_nlclslist
(classref_t
): इस बाइनरी में परिभाषित गुणसूची न आलसी Objective-C क्लास के पॉइंटर__objc_classlist
(classref_t
): इस बाइनरी में परिभाषित सभी Objective-C क्लास के पॉइंटर
यह इसके संदर्भ में कुछ खंडों का उपयोग करता है __TEXT
सेगमेंट में स्थिर मानों को संग्रहित करने के लिए जिन्हें इस खंड में लिखना संभव नहीं है:
__objc_methname
(सी-स्ट्रिंग): मेथड नाम__objc_classname
(सी-स्ट्रिंग): क्लास नाम__objc_methtype
(सी-स्ट्रिंग): मेथड प्रकार
प्रकार एन्कोडिंग
Objective-C उपयोग करता है कुछ मैंग्लिंग कोड सेलेक्टर और चर प्रकारों को सरल और जटिल प्रकारों के लिए एन्कोड करने के लिए:
मौलिक प्रकार अपने प्रकार का पहला अक्षर उपयोग करते हैं
i
इंट के लिए,c
चार के लिए,l
लॉन्ग के लिए... और उसका उपयोग करते हैं यदि यह असाइन्ड है (L
असाइन्ड लॉन्ग के लिए)।अन्य डेटा प्रकार जिनके अक्षर उपयोग किए जाते हैं या विशेष हैं, वे अन्य अक्षर या प्रतीक जैसे
q
लॉन्ग लॉन्ग के लिए,b
बिटफील्ड्स के लिए,B
बूलियन्स के लिए,#
क्लासेस के लिए,@
आईडी के लिए,*
चार पॉइंटर्स के लिए,^
सामान्य पॉइंटर्स के लिए और?
अनिर्धारित के लिए।एरे, संरचनाएँ और संघ उपयोग करते हैं
[
,{
और(
उदाहरण मेथड घोषणा
चयनकर्ता processString:withOptions:andError:
होगा
प्रकार एन्कोडिंग
id
को@
के रूप में एन्कोड किया जाता हैchar *
को*
के रूप में एन्कोड किया जाता है
इस मेथड के लिए पूर्ण प्रकार एन्कोडिंग है:
विस्तृत विश्लेषण
रिटर्न प्रकार (
NSString *
):@
के रूप में एन्कोड किया गया है, जिसकी लंबाई 24 हैself
(ऑब्जेक्ट इंस्टेंस):@
के रूप में एन्कोड किया गया है, ऑफसेट 0 पर_cmd
(सेलेक्टर)::
के रूप में एन्कोड किया गया है, ऑफसेट 8 परपहला तर्क (
char * input
):*
के रूप में एन्कोड किया गया है, ऑफसेट 16 परदूसरा तर्क (
NSDictionary * options
):@
के रूप में एन्कोड किया गया है, ऑफसेट 20 परतीसरा तर्क (
NSError ** error
):^@
के रूप में एन्कोड किया गया है, ऑफसेट 24 पर
सेलेक्टर + एन्कोडिंग के साथ आप विधि को पुनर्निर्माण कर सकते हैं।
कक्षाएँ
Objective-C में कक्षाएँ एक संरचना है जिसमें गुण, विधि प्वाइंटर... होते हैं। आप स्रोत कोड में objc_class
संरचना खोजना संभव है:
यह कक्षा इस्सा फील्ड के कुछ बिट्स का उपयोग करती है ताकि कक्षा के बारे में कुछ जानकारी को सूचित कर सके।
फिर, स्ट्रक्ट में डिस्क पर स्टोर किए गए स्ट्रक्ट class_ro_t
के लिए एक पॉइंटर होता है जिसमें कक्षा के नाम, बेस मेथड्स, गुण और इंस्टेंस वेरिएबल्स जैसी विशेषताएं होती हैं।
रनटाइम के दौरान और एक्सट्रा स्ट्रक्चर class_rw_t
का उपयोग किया जाता है जिसमें पॉइंटर्स होते हैं जो बदले जा सकते हैं जैसे कि मेथड्स, प्रोटोकॉल्स, गुण।...
Last updated