प्रौद्योगिकी साझेदारी

iOS गतिशीललिङ्ककार्यस्य आह्वानस्थानस्य स्थिरसन्धानम्

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

iOS गतिशीललिङ्ककार्यस्य आह्वानस्थानस्य स्थिरसन्धानम्

कार्यान्वयनीयं सञ्चिकास्वरूपं mach-O इति द्विचक्रीयसञ्चिकास्वरूपं एप्पल्-प्रचालनतन्त्रेषु macOS तथा iOS इत्यत्र उपयुज्यते ।

केषुचित् iOS सुरक्षास्कैन्षु, कार्यस्य विशिष्टं आह्वानस्थानं प्राप्तुं आवश्यकता भवितुम् अर्हति, यत् उपयोक्तृभ्यः अधिकसटीकरूपेण दुर्बलतायाः स्थानं ज्ञातुं मार्गदर्शनं कर्तुं शक्नोति
अधुना NSLog फंक्शन् उदाहरणरूपेण गृहीत्वा macho मध्ये dynamic link function इत्यस्य विशिष्टं calling स्थानं स्थिररूपेण अन्वेष्टुम् ।

लक्ष्य

एप्लिकेशन macho मध्ये NSLog फंक्शन् यत्र आह्वयते तत्र विशिष्टं स्थानं अन्वेष्टुम् ।

विचाराः

सम्पूर्णा अन्वेषणप्रक्रिया माचो सञ्चिकानां विश्लेषणस्य प्रक्रिया अस्ति तथा च द्विचक्रीयदत्तांशस्य विश्लेषणं समुचितदत्तांशसंरचनेषु भवति ।
माचो इत्यस्य बहुभागाः उपयुज्यन्ते : १.
String Table इति
प्रतीक सारणी
गतिशील प्रतीक सारणी
खण्ड ६४( २.पाठ,स्टब्स्) २.
खण्ड ६४( २.पाठ,पाठ)

विशिष्टानि पदानि

1. प्रथमं macho सञ्चिकायां Symbol Talbe तथा String Table इत्येतयोः स्थानं ज्ञातव्यम् ।

Load Commands मध्ये LC_SYMTAB अन्वेष्टुम्, भवान् StringTable इत्यस्य offset तथा ​​size निर्धारयितुं शक्नोति, अपि च offset तथा ​​Number of Symbol Table इत्यस्य अन्वेषणं कर्तुं शक्नोति:

प्रतीकसारणी आफ्सेट् 0x18c478 अस्ति
प्रतीकानाम् संख्या 0x9a2d अस्ति
String Table offset 0x2273b0 अस्ति
स्ट्रिंग् सारणी आकारः 0x108d58 अस्ति

यतः प्रत्येकं चिह्नदत्तांशदीर्घता १६ बाइट् भवति, यत् ०x१०,

अतः Symbol Table इत्यस्य आकारः 0x9a2d*0x10 = 0x9A2D0 अस्ति
Symbol Table इत्यस्य आरम्भसङ्केतः 0x18c478 अस्ति
समाप्तिपता 0x18c478 0x9A2D0 = 0x226748 अस्ति

String Table इत्यस्य आरम्भसङ्केतः 0x2273b0 अस्ति
समाप्तिपता 0x2273b0 0x108d58 = 0x330108 अस्ति
यतः स्ट्रिंग् इत्यस्य दीर्घता नियतं नास्ति, अतः String Table इत्यस्मिन् प्रत्येकस्य दत्तांशखण्डस्य दीर्घता न नियतं भवति ।
द्विचक्रीयरूपेण String Table-दत्तांशं पठन् भवान् 'x00' इत्यस्य उपयोगं स्ट्रिंग्-निर्धारकरूपेण कर्तुं शक्नोति ।

2. String Table इत्यस्य भ्रमणं कृत्वा _NSLog इति अन्वेष्टुम्

भवान् प्रथमं macho मध्ये String Table data पठितुं शक्नोति तथा च string array जनयितुं विभाजकरूपेण 'x00' इत्यस्य उपयोगं कर्तुं शक्नोति ।
स्ट्रिंग् सरणीं भ्रमित्वा निर्धारयन्तु यत् प्रत्येकं दत्तांशखण्डं "_NSLog" इत्यस्य बराबरम् अस्ति वा इति ।

_NSLog 0x23331b इत्यत्र प्राप्तम्, तथा च यन्त्रसङ्केतः "5F4E534C6F6700" "_NSLogn" स्ट्रिंग् अस्ति ।

49003 (षोडशदशमलये 0xBF6B) वर्तमानस्ट्रिंग् इत्यस्य अनुक्रमणिकासङ्ख्या अस्ति, या अस्थायीरूपेण strTab_index = 49003 इति निर्धारिता अस्ति ।
अनुक्रमणिकासङ्ख्या 49003 String Table इत्यस्य आरम्भपतेः 0x2273b0, 49003rd byte, 2273b0 इत्यस्मात् गण्यते ।
0x2273b0 49003 = 0x23331B, यत् _NSLog इत्यस्य आरम्भसङ्केतं भवति ।

3. चरण 2 मध्ये 49003 (0xBF6B) इत्यस्य अनुसारं SymbolTable मध्ये तत्सम्बद्धं चिह्नं अन्वेष्टुं शक्नुवन्ति

MachOView मध्ये, भवान् द्रष्टुं शक्नोति यत् 0x00224988 इति पता _NSLog इत्यनेन सह सङ्गच्छते ।

अनुक्रमणिकासङ्ख्या 49003 इत्यस्य माध्यमेन मेलयुक्तं प्रतीकसारणीदत्तांशं कथं ज्ञातव्यम्?
प्रथमपदे ज्ञातम् : १.
Symbol Table इत्यस्य आरम्भसङ्केतः 0x18c478, 2019 अस्ति ।
Symbol Table इत्यस्य अन्त्यसङ्केतः 0x226748 अस्ति ।
अस्मिन् macho मध्ये एकस्य Symbol Table इत्यस्य data size 0x10 भवति ।

Symbol Table इत्यस्मिन् 38993rd data इत्यस्य प्रथमचतुर्णां बाइट् इत्यस्य मूल्यं 0xBF6B अस्ति, यत् 49003 अस्ति ।
इदं String Table इत्यस्मिन् _NSLog स्ट्रिंग् इत्यस्य अनुक्रमणिकासङ्ख्यायाः समानम् अस्ति, अतः एषः दत्तांशः "_NSLog" इत्यनेन सह सङ्गच्छते:

38993 प्रतीकसारणीयां वर्तमानदत्तांशस्य अनुक्रमणिकासङ्ख्या अस्ति, अस्थायीरूपेण symTab_index = 38993,
0x18c478 38993 * 0x10 = 0x224988 वर्तमानदत्तांशस्य सम्यक् पता अस्ति ।

4. Dynamic Symbol Table इत्यस्मिन् symTab_index इत्यस्य आधारेण आँकडान् ज्ञातव्यम्

Indirect Symbols इत्यस्य स्थानं LC_DYSYMTAB इत्यस्मिन् Macho इत्यस्मिन् Load Commands इत्यस्य अन्तर्गतं निर्धारयितुं शक्यते:

आरम्भपता: 0x226748, 794 दत्तांशखण्डाः सन्ति, प्रत्येकस्य दत्तांशखण्डस्य आकारः 0x4 अस्ति ।
अप्रत्यक्षचिह्नेषु प्रत्येकं आँकडाखण्डं भ्रमन्तु 111तमः आँकडाखण्डः 38993 संग्रहयति ।
अतः एषः आँकडा "_NSLog" इत्यनेन सह सङ्गच्छते, dySymTab_index = 111 इति सेट् कुर्वन्तु
०x२२६७४८ १११*०x४ = ०x२२६९०४