ইএলএফ ফাইল এবং বিন ফাইলগুলির মধ্যে পার্থক্য কী?


100

কমপ্লায়ারদের দ্বারা উত্পাদিত চূড়ান্ত চিত্রগুলিতে বিন ফাইল এবং বর্ধিত লোডার বিন্যাস ELf ফাইল উভয়ই থাকে, বিশেষত ELF ফাইলের ইউটিলিটি উভয়ের মধ্যে পার্থক্য কী।


এনএএসএম এর এই কথা বলতে হবে । এআরএম নির্দিষ্ট নয়, তবে একই ধারণা হওয়ার সম্ভাবনা রয়েছে। উদাহরণস্বরূপ, আপনি যদি (বা ) NOPবিহীন কোনও ফাইল সংকলন করেন তবে এটি 400 বাইট ইএলএফ ধারকটির পরিবর্তে একটি একক বাইটে সংকলন করে । সুতরাং কেবল কাঁচা কোড, কোনও ধারক মেটাডেটা। এনএএসএম বলছে এটি বেশিরভাগ ক্ষেত্রে এমএস-ডস .কম এবং। এসওয়াইএস ফাইলগুলির জন্য ব্যবহৃত হয় । নির্দেশগুলি বেশিরভাগ উপেক্ষা করা হয় এবং কেবল প্রান্তিককরণ তৈরি করে। -f-fbin0x90-felf32section
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

: প্রয়োগের অপারেটিং সিস্টেম করার জন্য একটি বুট সেক্টর করতে এই এক উপায় যা বিন ফাইল উপযোগী হতে পারে stackoverflow.com/a/32483545/895245
সিরো Santilli郝海东冠状病六四事件法轮功

উত্তর:


96

একটি বিন ফাইল একটি খাঁটি বাইনারি ফাইল যা কোনও মেমোরি ফিক্স-আপ বা স্থানান্তরিত না করে, এটির নির্দিষ্ট মেমরি ঠিকানায় লোড করার জন্য স্পষ্ট নির্দেশাবলী রয়েছে likely যেখানে ....

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


"সম্ভবত কোনও নির্দিষ্ট মেমরি ঠিকানার উপর এটি লোড করার সুস্পষ্ট নির্দেশাবলী রয়েছে": এর অর্থ কি বিন ফাইল তৈরির প্রক্রিয়া নির্দিষ্ট ঠিকানায় ডেটা লোড করার জন্য অতিরিক্ত কোড যুক্ত করে?
Penghe Geng

4
আমি যতদূর জানতে পেরেছি যে বিন ফাইলটি অফসেট 0 থেকে প্রোগ্রাম চালানোর মতো এবং ডেটা বিভাগটি এম্বেড করা হয়। যদি এটি ভুল হয় তবে আমাকে সংশোধন করুন।
মার্টিন কার্স্টেন

@ মার্টিন কার্স্টেন সঠিক, বিন ফাইলগুলি অফসেট 0 থেকে শুরু হবে
t0 মিমি 13b

4
@ t0mm13b সুতরাং .২২ ফাইলগুলিকে একটি নিয়মিত। hex ফাইলের মতোই কোনও মাইক্রো-কন্ট্রোলারের উপর পোড়ানো যায় তবে এতে আরও ফ্ল্যাশ মেমরি লাগে এবং প্রতিবার মাইক্রো পুনরায় সেট হয়ে গেলে বিভাগগুলি পরিবর্তনগুলি সম্বোধন করে?
আলেগাওয়াদ

ব্ল্যাকডাকি, আমি বিশ্বাস করি না যে এটি সম্ভব। যদি কোনও মাইক্রোকন্ট্রোলার সরাসরি ইএলএফ ডেটা কার্যকর করতে চেষ্টা করে তবে এটি শিরোনাম হিসাবে শিরোনাম এবং অন্যান্য ডেটারের ভুল ব্যাখ্যা করবে, তাই না?
jacobq

40

একটি বিন ফাইল হ'ল বিট এবং বাইট যা রোমে যায় বা কোনও নির্দিষ্ট ঠিকানা যেখানে আপনি প্রোগ্রামটি চালাবেন। আপনি এই ডেটাটি নিতে এবং এটি সরাসরি যেমন লোড করতে পারেন, আপনার বেস ঠিকানাটি কী তা জানা দরকার যদিও এটি সেখানে সাধারণত নেই।

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

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


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

4
আপনি যদি ভিজিএতে কিছু আসকি প্রিন্ট করতে চান, আপনি এমন একটি প্রোগ্রাম লিখুন যা কিছু তথ্য আছে বা গাণিতিকভাবে ফ্লাই বা কিছু সংমিশ্রণে ডেটা উত্পন্ন করে, তারপরে আপনি সেই প্রোগ্রামটি অপারেটিং সিস্টেমের সংজ্ঞায়িত কোড স্পেসে লোড করুন, এবং তারপরে রান করুন এটা। আপনি সাধারণত কোনও দৈহিক পেরিফেরিয়াল এবং এটির বিরল অপারেটিং সিস্টেমের মধ্যে ডেটা সরাবেন না যা আপনাকে যে কোনও উপায়ে এটি করতে দেয় বা তার লোডারকে এটি করতে দেয়।
old_timer

4
খালি ধাতুর জন্য, esp যদি এই এল্ফ ফাইলটি বুটলোডার এবং / অথবা প্রথম প্রোগ্রামটি চালিত হয়, তবে এন্ট্রি পয়েন্ট এবং _ স্টার্ট প্রাসঙ্গিক নয় কারণ আপনি কোনও একটি সরঞ্জামের জন্য স্টেপিং পাথর হিসাবে এল্ফ ফাইলটি ব্যবহার করেন যা কোনও ফ্ল্যাশ প্রোগ্রাম করে (যেমন ওপেনকড ওভারের মতো) jtag) বা যাই হোক না কেন - যাই হোক না কেন-অবজেক্টপি -O বাইনারি ফাইল.ফিল ফাইল.বিন এবং তারপরে সেই ফাইলটি কোনওভাবে ফ্ল্যাশে লোড হবে। গেলেন না এবং x86 এ একটি বুটলোডার চেষ্টা করেছেন তবে ধরে নিন যে বায়োস ক্যান্ট এল্ফ ফাইলগুলি পার্স করতে পারে তাই এটির একটি মেমরি চিত্রও হওয়া দরকার। সুতরাং একটি-বাইনারি টাইপ বিন ফাইল
old_timer

4
পৃথক সত্তা হ'ল হার্ডওয়্যার / যুক্তি বা অন্যান্য নকশা। অপারেটিং সিস্টেমের জন্য অপারেটিং সিস্টেমটি নিয়মগুলি তৈরি করে, কোনও মাইক্রোকন্ট্রোলারের জন্য চিপ / প্রসেসরের ডিজাইনের বিধিগুলি তৈরি করে। উদাহরণস্বরূপ যদি কোনও ভেক্টর টেবিল থাকে এবং তারপরে ভেক্টর হ্যান্ডলারের দিকে ইঙ্গিত করে আপনাকে সেগুলি আপনার লিঙ্কার স্ক্রিপ্ট ইত্যাদিতে রোল করতে হবে যাতে লোডযোগ্য ডেটা ফ্ল্যাশটির জন্য নির্ধারিত হয় যা জিনিসটি বন্ধ হয়ে যায়।
old_timer

4
আপনার টার্গেটের নিয়মগুলি অপারেটিং সিস্টেম বা প্রসেসর বা মাল্টি-স্টেজ বুটলোডার ইত্যাদি রয়েছে তা সম্প্রসারিত করার জন্য এবং আপনাকে এই নিয়মের উপর ভিত্তি করে আপনার "বাইনারি" তৈরি করতে হবে, বুটস্ট্র্যাপ এবং লিনস্ক্রিপ্ট সবচেয়ে গুরুত্বপূর্ণ হচ্ছে। তারপরে এটি প্রতিটি লক্ষ্য হিসাবে এবং আপনি কীভাবে সেই বাইনারি প্রয়োগ করেন এবং কোন ফাইল ফর্ম্যাটগুলি সমর্থন করে তা খুব বিস্তৃত। বেশ কয়েকটি হোস্ট ডেভেলপমেন্ট প্ল্যাটফর্মগুলিতে gnu অনুমান করে এল্ফ ফাইল ফর্ম্যাটটি হ'ল ডিফল্ট আউটপুট এবং তারপরে আপনি এলফ থেকে অন্য কিছুতে এক্সট্রাক্ট বা রূপান্তর করতে প্রয়োজনীয় সরঞ্জামগুলি (যদি লক্ষ্য নির্দিষ্ট ইউটিলিটিস / লোডারগুলি) ব্যবহার করেন।
old_timer

30

কিছু সংস্থান:

  1. এআরএম আর্কিটেকচারের জন্য ইএলএফ
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. উইকি থেকে অনলাইন
    এলএনএফ

ELF ফর্ম্যাটটি সাধারণত সংকলনের ডিফল্ট আউটপুট। আপনি যদি জিএনইউ সরঞ্জাম চেইন ব্যবহার করেন তবে আপনি এজবকপি ব্যবহার করে বাইনারি বিন্যাসে এটি অনুবাদ করতে পারেন, যেমন:

  arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]

অথবা থেকে ইউএলএফ ইউটিলিটি (যদিও বেশিরভাগ আইডিই যেমন এডিএস-তে নির্মিত) ব্যবহার করে:

 fromelf -bin -o [binary-output-file] [elf-input-file]

6
পরে বিন ফাইল বিস্তারিত উত্তর দেওয়া হয়েছিল এই যোগ করা হয়েছে, এবং নেই অ্যাড-অন একটি কার্যত দরকারী টেকনিক। +1 এর জন্য
এরবেডেক্স

-1

আমি এখানে একটি পয়েন্ট ঠিক করতে চাই। ELF ফাইলটি সংযোগকারী নয়, লিংকার দ্বারা উত্পাদিত।

সংকলক মিশনটি উত্স কোড ফাইলগুলি ছাড়াই অবজেক্ট ফাইল (* .o) উত্পাদন করার পরে শেষ হয়। লিঙ্কার সমস্ত .o ফাইলগুলিকে একসাথে লিঙ্ক করে এবং ELF উত্পাদন করে।


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