কোনও ELF এক্সিকিউটেবলের কোন অংশগুলি মেমরিতে লোড হয় এবং কোথায়?


10

আমি ইতিমধ্যে যা জানি:

একটি ELF এক্সিকিউটেবলের বেশ কয়েকটি বিভাগ থাকে, স্পষ্টতই। পাঠ্য। এবং ড্যাটা বিভাগগুলি মেমোরিতে লোড হয়ে যায় কারণ এগুলি প্রোগ্রামের প্রধান অঙ্গ। তবে কোনও প্রোগ্রাম কাজ করার জন্য এটির আরও তথ্যের প্রয়োজন, বিশেষত যখন গতিশীলভাবে সংযুক্ত থাকে।

আমি যা আগ্রহী তা হ'ল .প্লিট, .গোট, .ডিমনিক, .ডিএনসিম, .ডিএনস্টার ইস্টেটেরার মতো বিভাগগুলি। ELF এর অংশগুলি যা ঠিকানার সাথে ফাংশনগুলির সংযোগের জন্য দায়ী।

আমি এতক্ষণ যা বের করতে পেরেছি তা থেকে, সাইক্যামটাব এবং .Sttab এর মতো জিনিসগুলি স্মৃতিতে লোড হয় না (বা থাকে না)। তবে .dnsym এবং .dynstr লিঙ্কার দ্বারা ব্যবহৃত হয়? তারা কি স্মৃতিতে থাকে? আমি কি তাদের প্রোগ্রাম কোড থেকে অ্যাক্সেস করতে পারি?

এবং কোনও এক্সিকিউটেবলের এমন কোনও অংশ রয়েছে যা কার্নেল স্মৃতিতে থাকে?

এ সম্পর্কে আমার আগ্রহটি বেশিরভাগ ফরেনসিক, তবে এই বিষয়ের কোনও তথ্যই সহায়তা করবে। এই টেবিলগুলি এবং গতিশীল সংযোগ সম্পর্কে আমি যে সংস্থানগুলি পড়েছি সেগুলি আরও উচ্চ স্তরের, তারা কেবল মেমরির বিষয়বস্তু সম্পর্কে বাস্তবিক কিছু নয়, কাজগুলি ব্যাখ্যা করে।

আমার প্রশ্ন সম্পর্কে অস্পষ্ট কিছু হলে আমাকে জানান।

উত্তর:


12

নিম্নলিখিতটি সত্যই একটি ভাল রেফারেন্স: http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/ । এটিতে বিভিন্ন স্তরের বিভিন্ন রেফারেন্সের শেষে একটি গ্রন্থাগার রয়েছে। আপনি যদি প্রতিটি ঘৃণ্য বিশদটি জানতে চান তবে আপনি সরাসরি উত্সটিতে যেতে পারেন: http://www.akkadia.org/drepper/dsohowto.pdf । (আলরিক ড্রেপার লিনাক্স ডায়নামিক লিঙ্কার লিখেছিলেন।)

আপনি "জেজডাম্প-ম মাইক্সে "বা" রিডফেল-এস মাইক্সি "এর মতো একটি কমান্ড চালিয়ে আপনার নির্বাহযোগ্য সমস্ত বিভাগের একটি সত্যই ওভারভিউ পেতে পারেন।

.Interp বিভাগে গতিশীল লোডারটির নাম রয়েছে যা এই বস্তুর প্রতীকগুলিকে গতিশীলভাবে সংযুক্ত করতে ব্যবহৃত হবে। .Dnamic বিভাগটি প্রোগ্রামের শিরোনামের একটি পাতন যা গতিশীল লোডার পড়ার পক্ষে সহজ করার জন্য ফর্ম্যাট করা হয়। (সুতরাং এটি অন্যান্য সমস্ত বিভাগে পয়েন্টার আছে।)

.Got (গ্লোবাল অফসেট টেবিল) এবং .plt (পদ্ধতি লিংকেজ টেবিল) হ'ল দুটি প্রধান কাঠামো যা গতিশীল লিঙ্কার দ্বারা চালিত হয়। .Got হল ভেরিয়েবলের জন্য একটি ইন্ডিরিশন টেবিল এবং .plt ফাংশনগুলির জন্য একটি ইন্ডিরিশন টেবিল। প্রতিটি এক্সিকিউটেবল বা লাইব্রেরি (যাকে "শেয়ারড অবজেক্টস" বলা হয়) এর নিজস্ব .got এবং .plt রয়েছে এবং এগুলি সেই শেয়ার্ড অবজেক্টের দ্বারা উল্লিখিত প্রতীকগুলির টেবিল যা আসলে অন্য কয়েকটি ভাগ করা বস্তুর মধ্যে রয়েছে।

.Dnsyn আপনার ভাগ করা অবজেক্টের চিহ্নগুলি সম্পর্কিত সমস্ত তথ্য (আপনার সংজ্ঞা দেওয়া বাহ্যিক এবং বাহ্যিক উভয়ই আপনার উল্লেখ করা দরকার contains এগুলি .dnstr এবং .dnsyn এর মধ্যে রয়েছে .dnstr এ পয়েন্টার রয়েছে। .gnu.hash একটি হ্যাশ টেবিল যা নামের দ্বারা প্রতীকগুলি দ্রুত দেখার জন্য ব্যবহৃত হয়। এটিতে কেবলমাত্র পয়েন্টার রয়েছে (.dnstr মধ্যে পয়েন্টার এবং বালতি চেইন তৈরির জন্য ব্যবহৃত পয়েন্টার contains

যখন আপনার ভাগ করা অবজেক্টটি কোনও চিহ্নকে "ফু" উপস্থাপন করে তখন ডায়নামিক লিঙ্কারের সাথে আপনি যে সমস্ত ডায়নামিক অবজেক্টের সাথে যুক্ত ছিলেন তার মধ্যে "ফু" সন্ধান করতে হবে যার মধ্যে আপনি অনুসন্ধান করছেন "ফু" রয়েছে (এবং তারপরে আত্মীয়টি কী "foo" এর ঠিকানাটি সেই ভাগ করা অবজেক্টের অভ্যন্তরে রয়েছে The) ডায়নামিক লিঙ্কারটি লিঙ্কযুক্ত সমস্ত অংশযুক্ত বস্তুর (gn।) বিভাগে (অথবা .gnu নেই এমন পুরানো ভাগ করা অবজেক্টের জন্য .hash বিভাগ) অনুসন্ধান করে এটি করে। হ্যাশ বিভাগ)


ধন্যবাদ, আপনার লিঙ্কগুলি আমার প্রয়োজনীয় বিভাগগুলির ভার্চুয়াল ম্যাপিংগুলি সন্ধানের জন্য আমাকে আরও এক ধাপ এগিয়ে নিয়েছে। যেহেতু এতে আমার আগ্রহটি ফরেনসিক, "ডিআরএমে ভর্তি" এখনও আমার কাছে প্রাসঙ্গিক। যদি কোনও বিভাগ ম্যাপ করা হয় তবে কখনই লোড হয় না, আমি এটি কোনও মেমরির ডাম্পের মধ্যে খুঁজে
পাব

তুমি ঠিক. আপনি যখন মেমরি ডাম্প করবেন তখন আপনি প্রতিটি ম্যাপযুক্ত পৃষ্ঠার একটি অনুলিপি পাবেন সুতরাং "ভিএম-এ ম্যাপযুক্ত" এবং "ডিআরএমে লোড হওয়া" এর মধ্যে আমার পার্থক্য অপ্রাসঙ্গিক। আমি সেই বাক্যটি সরিয়েছি এবং উত্তরটির উন্নতি হয়েছে। ধন্যবাদ!
বিচরণ

আপনার উত্তরটিকে উত্তর হিসাবে চিহ্নিত করুন, কারণ আমি যতটা তথ্য পেতে চলেছি তাই :) নিজেকে নিজেই করতে হবে, এটি আমার গবেষণার পরেও।
ডাচি

সুতরাং, হ্যাঁ। ডিএনএসএম এবং .ডিএনস্টার (এবং অন্যান্য) গতিশীল লিঙ্কার দ্বারা ব্যবহৃত হয় এবং প্রোগ্রাম মেমোরিতে লোড হয় (পাঠ্য বিভাগে) এবং আপনার প্রোগ্রাম দ্বারা রানটাইম এ ব্যবহার করা যেতে পারে।
ysdx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.