मैं लोड होने और चलाने के बाद प्रक्रिया के आयात पता तालिका (आईएटी) में जानकारी को पार्स/प्रदर्शित करने का प्रयास कर रहा हूं। मैं समझता हूं कि कार्यक्रमों में एपीआई कॉल आईएटी में प्रासंगिक बिंदु पर कूदते हैं, जो तब लोड किए गए डीएलएल में वास्तविक फ़ंक्शन पर कूद जाता है।आयात तालिका (आईटी) बनाम आयात पता तालिका (आईएटी)
क्या यह सही है कि आईईटी पीई हेडर पढ़ने और वैकल्पिक हेडर। डेटा डायरेक्टरी [1] पॉइंटर का पालन करके IMAGE_IMPORT_DESCRIPTOR की सरणी में पाया जा सकता है। फिर फर्स्ट टंक पॉइंटर्स का पालन करें। जबकि OriginalFirstThunk पॉइंटर्स यहां आपको मूल आयात तालिका (आईटी) दे देंगे?
मैंने पीई हेडर में OptionalHeader.DataDirectory [12] सूचक का पालन करने का भी प्रयास किया है, लेकिन यह भी कम सफल था।
मैं किसी अन्य प्रक्रिया से ReadProcessMemory का उपयोग करके, notepad.exe (32bit) के लिए इस संरचना को पार्स करने का प्रयास करके इसका परीक्षण कर रहा हूं।
char buf[128];
// get first import descriptor
readMemory(&import, procImgBase + DataDirectory[1].VirtualAddress, sizeof(IMAGE_IMPORT_DESCRIPTOR));
// get dll name
readMemory(buf, import.Name + procImgBase, 127);
printf("libname: %s\n", buf);
// get first function name
DWORD iltAddress = 0;
readMemory(&iltAddress, import.FirstThunk + procImgBase, 4);
readMemory(buf, iltAddress + procImgBase, 127);
printf("fname: %s\n", libName + 2); // <-- the +2 for the 2byte 'hint' of import lookup table entries
हैं, तो अंतिम पंक्ति के लिए 3 पर, मैं इसे FirstThunk के बजाय import.OriginalFirstThunk के साथ बदलें, यह सब कुछ प्रिंट होगा अपेक्षा के अनुरूप:
यहाँ मैं क्या कर रहा के लिए किसी न किसी तरह सी psuedocode है । मुझे अवधारणात्मक रूप से कुछ याद आना चाहिए, और इसलिए मैं सोच रहा था कि कोई यह स्पष्ट कर सकता है कि यह मेरे लिए क्या है?
बहुत धन्यवाद!
धन्यवाद! अब समझ में आता है। मुझे लगता है कि मुझे एहसास होना चाहिए था कि जब मैं वापस आ रहा था, तो मान्य पते की तरह दिखता था, आरवीए नहीं। – kwytay
@ एरिक रहम, क्या आप अपने पहले बुलेट पॉइंट के बारे में निश्चित हैं? 'Winnt.h' में, वैकल्पिक शीर्षलेख structs' IMAGE_DATA_DIRECTORY डेटा डायरेक्टरी [IMAGE_NUMBEROF_DIRECTORY_ENTRIES] को परिभाषित करते हैं; '' IMAGE_IMPORT_DESCRIPTOR डेटा डायरेक्टरी [IMAGE_NUMBEROF_DIRECTORY_ENTRIES] नहीं; ' –
यह वह जगह है जहां मैं वर्तमान में अटक गया हूं ... मुझे डेटा प्राप्त करने के लिए तैयार है निर्देशिकाएं, लेकिन आईएटी या आईएलटी या आईएनटी से डीएलएल नाम प्राप्त करने के लिए उन्हें सही structs में लोड करने के लिए वर्तमान में मुझे अवरुद्ध कर रहा है। –