delphi - आप डेल्फी प्रोग्राम या कंपाइलर-जनरेट डीबग जानकारी से स्थानीय चर जानकारी(पता और प्रकार) कैसे निकालते हैं?



stack local-variables (1)

जांचें कि क्या कोई डीबगिंग प्रतीक बाइनरी में नहीं थे। जीडीबी (विंडोज के एक पोर्ट पर) का उपयोग भी संभव है। यह बहुत अच्छा होगा अगर आपको एक .dbg या .dSYM फ़ाइल मिल जाए। वे स्रोत कोड होते हैं, उदाहरण के लिए।

gdb> list foo
56 void foo()
57 {
58  bar();
59  sighandler_t fnc = signal(SIGHUP, SIG_IGN);
60  raise(SIGHUP);
61  signal(SIGHUP, fnc);
62  baz(fnc);
63 }

यदि आपके पास कोई डीबगिंग फ़ाइल नहीं है, तो आप MinGW या Cygwin प्राप्त करने का प्रयास कर सकते हैं, और nm (1) ( मैन पेज ) का उपयोग कर सकते हैं। यह बाइनरी से प्रतीक नामों को पढ़ेगा। उनमें कुछ प्रकार शामिल हो सकते हैं, जैसे C ++ वाले:

int abc::def::Ghi::jkl(const std::string, int, const void*)

जोड़ना न भूलें - इसके बाद --demangle विकल्प या आपको कुछ ऐसा मिलेगा:

__ZN11MRasterFont21getRasterForCharacterEh

के बजाय:

MRasterFont::getRasterForCharacter(unsigned char)

मेरा लक्ष्य है:

  • स्टैक (करने योग्य) चलने के लिए डेल्फी-संकलित 32 या 64-बिट विंडोज प्रोग्राम में एक निलंबित धागे को देखते हुए।
  • स्टैक प्रविष्टियों को देखते हुए, प्रत्येक विधि और उनके मूल्यों में स्थानीय चरों की गणना करना। यही है, बहुत कम से कम, उनके पते और प्रकार (पूर्णांक 32/64 / हस्ताक्षरित / अहस्ताक्षरित, स्ट्रिंग, फ्लोट, रिकॉर्ड, वर्ग ...) का संयोजन खोजें, जिसका उपयोग उनके मूल्य को खोजने के लिए किया जा सकता है।

पहला ठीक है और यह दूसरा सवाल है। उच्च स्तर पर, आप डेल्फी में स्टैक एंट्री के लिए स्थानीय वेरिएबल्स की गणना कैसे करते हैं?

निम्न स्तर पर, यह वही है जिसकी मैं जाँच कर रहा हूँ:

RTTI: तरीकों के बारे में इस तरह की जानकारी को सूचीबद्ध नहीं करता है। यह ऐसा कुछ नहीं था जिसे मैंने कभी सोचा था कि यह एक यथार्थवादी विकल्प था, लेकिन वैसे भी यहां सूचीबद्ध करना।

डीबग जानकारी: डीबग बिल्ड के लिए उत्पादित डीबग जानकारी लोड हो रहा है।

  • मानचित्र फ़ाइलें: यहां तक ​​कि एक विस्तृत मानचित्र फ़ाइल (एक पाठ-प्रारूप फ़ाइल! एक खोलें और एक नज़र है) में स्थानीय चर जानकारी नहीं है। यह मूल रूप से पते और स्रोत फ़ाइल लाइन नंबरों की एक सूची है। फ़ाइल और लाइन सहसंबंध के पते के लिए महान, जैसे कि नाली में नीले डॉट्स; अधिक विस्तृत जानकारी के लिए महान नहीं
  • दूरस्थ डिबगिंग जानकारी (RSM फ़ाइल) - इसकी सामग्री या प्रारूप पर कोई ज्ञात जानकारी नहीं
  • TD32 / TDS फ़ाइलें: अनुसंधान की मेरी वर्तमान लाइन। उनमें बहुत सारी अन्य जानकारियों के बीच वैश्विक और स्थानीय प्रतीक हैं।

मैं यहाँ जिन समस्याओं का सामना कर रहा हूँ वे हैं:

  • TD32 फ़ाइल प्रारूप का कोई प्रलेखन नहीं है (जो मुझे मिल सकता है।)
  • उनमें से मेरा अधिकांश ज्ञान जेडीसीएल जेसीएल कोड से आता है, जो उनका उपयोग कर रहा है (JclTD32.pas) और मुझे यकीन नहीं है कि उस कोड का उपयोग कैसे किया जाए, या क्या वहां की संरचनाएं स्थानीय संस्करण दिखाने के लिए पर्याप्त व्यापक हैं। मुझे पूरा यकीन है कि यह वैश्विक प्रतीकों को संभाल लेगा, लेकिन मैं स्थानीय के बारे में बहुत अनिश्चित हूं। प्रारूप के लिए और दस्तावेजों के बिना परिभाषित विभिन्न प्रकार की स्थिरांक हैं, यह पढ़ने के लिए कि उनका क्या मतलब है, मुझे अनुमान लगाना छोड़ दिया गया है। हालांकि, उन स्थिरांक और उनके नाम कहीं से आने चाहिए।
  • स्रोत मैं टीडीएस जानकारी का उपयोग करके स्थानीय प्रतीकों को लोड या संभाल नहीं पाता है।

यदि यह सही दृष्टिकोण है, तो यह प्रश्न बन जाता है कि 'क्या टीडीएस / टीडी 32 फाइल प्रारूप के लिए प्रलेखन है, और क्या कोई कोड नमूने हैं जो स्थानीय चर लोड करते हैं?'

एक कोड नमूना आवश्यक नहीं है, लेकिन बहुत उपयोगी हो सकता है, भले ही यह बहुत कम हो।





debug-symbols