মূল ডাম্পটি আপনার প্রোগ্রামগুলির মেমরির পদক্ষেপের ডাম্প মাত্র, যদি আপনি জানতেন যে যেখানে সবকিছু ছিল তখন আপনি কেবল এটি ব্যবহার করতে পারেন।
আপনি এক্সিকিউটেবলটি ব্যবহার করেন কারণ এটি ব্যাখ্যা করে যেখানে (লজিকাল ঠিকানার শর্তে) জিনিসগুলি মেমরিতে অবস্থিত, অর্থাত্ মূল ফাইল।
আপনি যদি কোনও কমান্ড ব্যবহার করেন তবে objdump
এটি কার্যকর করা যায় এমন বস্তুর সম্পর্কে মেটা ডেটা ডাম্প করবে you উদাহরণ হিসাবে a.out নামে একটি এক্সিকিউটেবল অবজেক্ট ব্যবহার করা।
objdump -h a.out
কেবল শিরোনামের তথ্য ডাম্প করে, আপনি উদাহরণস্বরূপ বিভাগগুলি দেখতে পাবেন। .ডাটা বা .বিএস বা টেক্সট (আরও অনেক কিছু আছে)। এগুলি কার্নেল লোডারকে অবহিত করে যেখানে বস্তুটিতে বিভিন্ন বিভাগ পাওয়া যাবে এবং প্রক্রিয়া ঠিকানার জায়গাতে বিভাগটি লোড করা উচিত এবং কিছু বিভাগের জন্য (যেমন .ডাটা। পাঠ্য) কী লোড করা উচিত। (.bss বিভাগে ফাইলটিতে কোনও ডেটা থাকে না তবে এটি অবিবেচনাযুক্ত ডেটা প্রক্রিয়ায় সংরক্ষণের জন্য মেমরির পরিমাণকে বোঝায়, এটি জিরো দিয়ে পূর্ণ)।
এক্সিকিউটেবল অবজেক্ট ফাইলের বিন্যাসটি একটি স্ট্যান্ডার্ড, ইএলএফ এর সাথে সামঞ্জস্য করে।
objdump -x a.out
- সবকিছু ফেলে দেয়
যদি এক্সিকিউটেবল অবজেক্টটিতে এখনও তার চিহ্ন সারণী থাকে (এটি ছিনিয়ে নেওয়া হয়নি - man strip
এবং আপনি
এসি উত্স সংকলন ধরে -g
ডিবাগ প্রজন্ম তৈরি করেছিলেন gcc
) তবে আপনি মূল বিষয়বস্তুগুলি চিহ্নের দ্বারা পরীক্ষা করতে পারেন, উদাহরণস্বরূপ যদি আপনার কোনও চলক / বাফার থাকে আপনার উত্স কোডে নাম দেওয়া ইনপুটলাইন , আপনি gdb
এটির সামগ্রীটি দেখতে সেই নামটি ব্যবহার করতে পারেন । অর্থাত্ gdb
আপনার প্রোগ্রামগুলির সূচনা থেকে অফসেটটি জানা থাকবে ডেটা বিভাগ যেখানে ইনপুটলাইন শুরু হয় এবং সেই পরিবর্তনশীলটির দৈর্ঘ্য।
আরও পড়ুন Article1 ,
ধারা 2 , এবং উকুনসম্পন্ন বালুকাময় জন্য সম্পাদনযোগ্য এবং লিঙ্ক ফরম্যাট (ELF) স্পেসিফিকেশন ।
নীচে @ মিরাবিলোসের মন্তব্যের পরে আপডেট করুন।
তবে প্রতীক টেবিলটি হিসাবে ব্যবহার করা হয়
$ gdb --batch -s a.out -c core -q -ex "x buf1"
উত্পাদন
0x601060 <buf1>: 0x72617453
এবং তারপরে প্রতীক টেবিল ব্যবহার না করা এবং সরাসরি ঠিকানা পরীক্ষা করা,
$ gdb --batch -c core -q -ex "x 0x601060"
উত্পাদন
0x601060: 0x72617453
আমি দ্বিতীয় কমান্ডের প্রতীক টেবিলটি ব্যবহার না করে সরাসরি মেমরি পরীক্ষা করেছি।
আমি আরও দেখছি, @ ব্যবহারকারীর ৮৮০০৮২ এর উত্তর ব্যাখ্যাটিতে আরও যোগ করেছে এবং ভোট দেবে।