আপনি কীভাবে একটি ডেল্ফি প্রোগ্রাম বা সংকলক-উত্পাদিত ডিবাগ তথ্য থেকে স্থানীয় পরিবর্তনশীল তথ্য (ঠিকানা এবং প্রকার) বের করবেন?


105

আমার লক্ষ্য:

  • স্ট্যাকটি হাঁটতে (করণীয়) একটি ডেলফি-সংকলিত 32 বা 64-বিট উইন্ডোজ প্রোগ্রামে স্থগিত থ্রেড দেওয়া হয়েছে
  • প্রতিটি পদ্ধতিতে এবং তাদের মানগুলিতে স্থানীয় ভেরিয়েবলগুলি গণনা করার জন্য স্ট্যাক এন্ট্রি দেওয়া হয়েছে। এটি, খুব কমপক্ষে, তাদের ঠিকানা এবং টাইপ করুন (পূর্ণসংখ্যা 32/64 / স্বাক্ষরিত / স্বাক্ষরযুক্ত, স্ট্রিং, ফ্লোট, রেকর্ড, বর্গ ...) যার সংমিশ্রণটি তাদের মান সন্ধান করতে ব্যবহার করা যেতে পারে।

প্রথমটি ঠিক আছে এবং এটি দ্বিতীয় যা এই প্রশ্নটি নিয়ে। উচ্চ স্তরে, আপনি কীভাবে স্থানীয় ভেরিয়েবলগুলি ডেলফিতে একটি স্ট্যাক এন্ট্রি দিয়ে গণনা করবেন?


নিম্ন স্তরে, আমি এটি যা তদন্ত করছি:

আরটিটিআই: পদ্ধতি সম্পর্কে এই ধরণের তথ্য তালিকাভুক্ত করে না। এটি এমন কিছু ছিল না যা আমি বাস্তবে ভাবি সত্যবাদী বিকল্প, তবে যে কোনও উপায়ে এখানে তালিকাবদ্ধ করা।

ডিবাগ তথ্য: একটি ডিবাগ বিল্ডের জন্য উত্পাদিত ডিবাগ তথ্য লোড হচ্ছে।

  • মানচিত্র ফাইল: এমনকি একটি বিশদ মানচিত্র ফাইল (একটি পাঠ্য-বিন্যাস ফাইল! একটি খুলুন এবং একবার দেখুন) স্থানীয় ভেরিয়েবল তথ্য ধারণ করে না। এটি মূলত ঠিকানা এবং উত্স ফাইল লাইন নম্বরগুলির একটি তালিকা। ফাইল এবং লাইন পারস্পরিক সম্পর্কের ঠিকানার জন্য দুর্দান্ত, উদাহরণস্বরূপ নর্দমার নীল বিন্দুগুলি; বিস্তারিত তথ্যের জন্য দুর্দান্ত নয়
  • রিমোট ডিবাগিং তথ্য (আরএসএম ফাইল) - এর বিষয়বস্তু বা ফর্ম্যাট সম্পর্কিত কোনও তথ্য নেই
  • টিডি 32 / টিডিএস ফাইল: আমার বর্তমান গবেষণার লাইন। এগুলিতে প্রচুর অন্যান্য তথ্যের মধ্যে গ্লোবাল এবং স্থানীয় চিহ্ন রয়েছে।

আমি এখানে যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল:

  • টিডি 32 ফাইল ফর্ম্যাটটির কোনও ডকুমেন্টেশন নেই (যা আমি খুঁজে পেতে পারি))
  • তাদের সম্পর্কে আমার বেশিরভাগ জ্ঞান জেডি জেসিএল কোডগুলি তাদের (জেএলটিডিটি 32. পাসস) ব্যবহার করে আসে এবং আমি নিশ্চিত না যে কীভাবে এই কোডটি ব্যবহার করতে হবে, বা সেখানকার কাঠামোগুলি স্থানীয় ওয়ারগুলি দেখানোর জন্য যথেষ্ট বিস্তৃত রয়েছে কিনা। আমি নিশ্চিত যে এটি বিশ্বব্যাপী প্রতীকগুলি পরিচালনা করবে, তবে আমি স্থানীয় সম্পর্কে খুব অনিশ্চিত। বিন্যাসের জন্য বিভিন্ন ধরণের ধ্রুবক সংজ্ঞায়িত এবং ডকুমেন্টেশন ছাড়াই রয়েছে, তাদের অর্থটি পড়তে, আমি অনুমান করা ছেড়ে চলেছি। তবে, এই ধ্রুবকগুলি এবং তাদের নাম অবশ্যই কোথাও থেকে আসতে হবে।
  • উত্স আমি টিডিএস তথ্য ব্যবহার করে দেখতে পাচ্ছি যে স্থানীয় প্রতীকগুলি লোড বা পরিচালনা করে না।

যদি এটি সঠিক পদ্ধতির হয়, তবে এই প্রশ্নটি হয়ে ওঠে 'টিডিএস / টিডি 32 ফাইল ফর্ম্যাটের জন্য কোনও নথিপত্র আছে এবং স্থানীয় কোডগুলি লোড করে এমন কোনও কোডের নমুনা রয়েছে?'

একটি কোড নমুনা অপরিহার্য নয় তবে এটি খুব কম ন্যূনতম হলেও কার্যকর হতে পারে।


2
আমি টিডি 32 তথ্য অ্যাক্সেস করার জন্য জেডি জেসিএল ইউনিটগুলি আসলে ব্যবহার করি নি - এর জন্য আমার নিজস্ব মালিকানাধীন গ্রন্থাগার রয়েছে তবে এটি জ্যাকটিটিডি 32.পাশে রয়েছে যে সমস্ত বেসিক নদীর গভীরতানির্ণয় আপনার প্রয়োজন হবে বলে মনে হচ্ছে। পরিবর্তনশীল তথ্য অ্যাক্সেসের জন্য আমি খুঁজে পেতে পারি এমন কোনও ডেমো কোড নেই, তবে সেখানে যে নমুনাটি রয়েছে (এতে .. \ জেসিএল \ উদাহরণগুলি \ উইন্ডোজ \ ডিবাগ \ সোরসেলোক) দেখায় কীভাবে টিডি 32 তথ্য থেকে লাইন নম্বর তথ্য পাওয়া যায়, তাই আপনার যা প্রয়োজন তা পাওয়ার জন্য আপনার এটি তৈরি করতে সক্ষম হওয়া উচিত। দয়া করে এখানে যা
500 - অভ্যন্তরীণ সার্ভার ত্রুটি

2
@ 500-অভ্যন্তরীণ সার্ভারেরর ধন্যবাদ। লাইন নম্বর তথ্য সহজ (এটি এমনকি মানচিত্রের ফাইলগুলিতেও) - তবে আপনি জেসিএল কোডে যা দেখতে পান সে সম্পর্কে স্থানীয় কোনও চিহ্নগুলির সাথে সম্পর্কিত যা কোনও তথ্য সরবরাহ করতে পারেন? এছাড়াও, কৌতূহলের বাইরে আপনার টিডি 32 মালিকানা গ্রন্থাগারটি কী এবং এটি কি প্রকাশিত / প্রকাশ্যে ব্যবহারযোগ্য বা অভ্যন্তরীণভাবে প্রকাশিত হয়?
ডেভিড

3
প্রতিটি প্রক্রিয়া / ফাংশন / পদ্ধতির প্রতীক পরিবর্তে এটির স্থানীয় চিহ্নগুলির একটি তালিকা রয়েছে। বেশিরভাগ সংজ্ঞা জেডি ইউনিটে উপস্থিত বলে মনে হয় তবে কিছু মন্তব্য করে। আমার পরামর্শ হ'ল ক্ষুদ্র পরীক্ষার অ্যাপ্লিকেশন তৈরি করা এবং প্রতীকগুলির একটি অঙ্ক কী প্রত্যাবর্তন করবে তা দেখুন। আমার কাছে কোডটি মালিকানাধীন এবং আমার প্রকাশের জন্য নয়। এটি যাইহোক স্থানীয় চলকগুলির বিষয়টি কভার করে না। তবে এর উপর ভিত্তি করে তৈরি তথ্যটি আধা-সর্বজনীন, সুতরাং আপনি যদি নির্দিষ্ট প্রাচীরের মধ্যে চলে যান তবে আমি সাহায্য করতে সক্ষম হতে পারি।
500 - অভ্যন্তরীণ সার্ভার ত্রুটি

4
tds2pdb (কোড. google.com/p/map2dbg ) টিডিএস ফাইলগুলির জন্য একটি পার্সার রয়েছে বলে মনে হচ্ছে। এটি সি # কোড যদিও।
গ্রেমেটার

4
সেখানে একটি অনানুষ্ঠানিক নথি থাকত, হ্যাঁ, তবে তারপরে বোরল্যান্ড (সেই সময়ে) ডিবাগের তথ্য অ্যাক্সেস করার পরিবর্তে একটি ডেল প্রকাশ করার সিদ্ধান্ত নিয়েছে যাতে তারা অভ্যন্তরীণ বিন্যাসটি পরিবর্তন করতে পারে এবং ডকুমেন্টেশন আপডেট করতে না পারে। দুর্ভাগ্যক্রমে, আমি এখনই মূল দস্তাবেজ বা ডেল সনাক্ত করতে পারি না। আমি আপনাকে এম্বারকাডেরো প্রযুক্তিগত সহায়তার সাথে যোগাযোগ করতে এবং এটি সম্পর্কে জিজ্ঞাসা করার পরামর্শ দিচ্ছি।
500 - অভ্যন্তরীণ সার্ভার ত্রুটি

উত্তর:


2

কোনও ডিবাগিং প্রতীক বাইনারি না ছিল কিনা তা পরীক্ষা করে দেখুন। জিডিবি (এটির একটি পোর্ট উইন্ডোজ) ব্যবহার করাও সম্ভব। আপনি .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 বা সাইগউইন পাওয়ার চেষ্টা করতে পারেন এবং এনএম (1) ( ম্যান পৃষ্ঠা ) ব্যবহার করতে পারেন । এটি বাইনারি থেকে প্রতীক নামগুলি পড়বে। এগুলিতে কিছু প্রকার থাকতে পারে, যেমন সি ++ রয়েছে:

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

--demangleবিকল্পটি যুক্ত করতে ভুলবেন না অথবা আপনি এর মতো কিছু পাবেন:

__ZN11MRasterFont21getRasterForCharacterEh

পরিবর্তে:

MRasterFont::getRasterForCharacter(unsigned char)

2
জাকুব, উত্তরের জন্য ধন্যবাদ। দুর্ভাগ্যক্রমে আমার সম্ভবত একটি নির্দিষ্ট ডিবাগ ফর্ম্যাট টিডিএস পড়তে হবে। উইন্ডোজে ডিলফি অ্যাপ্লিকেশনগুলি জিডিবি-সামঞ্জস্যপূর্ণ ডিবাগ তথ্যের সাথে সংকলিত নয়। আমি নিশ্চিত না যে এনএম কীভাবে সহায়তা করবে, যেহেতু এটি একটি নির্দিষ্ট ডিবাগ ফাইল ফর্ম্যাটের উপর নির্ভর করবে যা সম্ভবত ডেলফি জেনারেট করে না। অথবা আমি আপনার উত্তরটি ভুল বুঝেছি - উদাহরণস্বরূপ, জিডিবি কি ডেলফির প্রতীকগুলি পড়তে পারে?
ডেভিড

@ ডেভিডএম, আপনার মন্তব্যটি অত্যন্ত গুরুত্বপূর্ণ। উইন্ডোজে জিএনইউ বিন্টিলস বা জিএনইউ ডিবাগার বন্দরটি অনুসন্ধান করার চেষ্টা করুন (আমি কেবল বিন্টিলস পোর্ট জানি)। জিডিবির জন্য একটি বিএফডি গ্রন্থাগার রয়েছে। এটি বিনুটিলেসেও ব্যবহৃত হয়। এটি একাধিক ফাইল ফর্ম্যাটগুলি পড়তে এবং তাদের যাদু সংখ্যায় তাদের সনাক্ত করতে দেয়। যদি সবকিছু ব্যর্থ হয় তবে ডাকা সরঞ্জামটি ব্যবহার করুন strings। এটি যে কোনও বাইনারি ফাইল থেকে স্ট্রিংগুলি বের করবে। ম্যান পৃষ্ঠা দেখুন । এটি স্ট্রিংগুলি মুদ্রণ করবে যা হয়ত সহায়ক হতে পারে না
শীর্ষ সেক্রেট

0

কটাক্ষপাত http://download.xskernel.org/docs/file%20formats/omf/borland.txt ওপেন আর্কিটেকচার হ্যান্ডবুক। এটি পুরানো, তবে আপনি ফাইল ফর্ম্যাট সম্পর্কে কিছু প্রাসঙ্গিক তথ্য খুঁজে পেতে পারেন।


আপনি কি দয়া করে কিছু প্রসঙ্গ যুক্ত করতে পারেন, লিঙ্কটি ভবিষ্যতে নষ্ট হয়ে যেতে পারে।
হিন্থাম

লিঙ্কটিতে বোরল্যান্ডের অফিসিয়াল ডকুমেন্ট রয়েছে বোরল্যান্ডের কম্পাইলার দ্বারা ব্যবহৃত ওএমএফ ফাইল ফর্ম্যাট এবং বোরল্যান্ডের ব্যবহৃত অন্যান্য বাইনারি ফাইল ফর্ম্যাট সম্পর্কে। কয়েক বছর আগে আমি টিডিএস ফাইল ফর্ম্যাটটি দেখেছিলাম এবং সেখানে কিছু অংশ নথিভুক্ত ফাইল ফর্ম্যাটগুলির সাথে সামঞ্জস্যপূর্ণ বলে মনে হয়েছে। টিডিএস ফাইল থেকে স্থানীয় ভেরিয়েবল সম্পর্কে কোনও তথ্য সংগ্রহ করার চেষ্টা করার সময়, লিঙ্কযুক্ত ডকুমেন্টেশনগুলি ব্যবহার বা রেফারেন্স করা উচিত। লিঙ্কটি যদি ভাঙা যায় তবে আমার উত্তরটি অকেজো হবে এবং প্রয়োজনীয় তথ্য নষ্ট হবে। লিঙ্কযুক্ত "ওপেন আর্কিটেকচার হ্যান্ডবুক" পুরানো টার্বো পাস্কেল এবং সি প্রকাশের অংশ ছিল।
মিউতজে 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.