একটি লিনাক্স বাইনারি ফাইল 32-বিট বা 64-বিট কিনা তা কীভাবে নির্ধারণ করবেন?


24

একটি 32-বিট কার্নেল (x86) কেবল 32-বিট কোড চালাতে পারে। একটি 64-বিট কার্নেল (x86_64) 32-বিট এবং 64-বিট কোড উভয়ই চালাতে পারে।

আমি জানতে চাই যে কোনও মেশিন এক্সিকিউটেবল চালাতে পারে কিনা: অন্য কথায়, আমার কাছে একটি বাইনারি ফাইল রয়েছে এবং আমাকে এটি 32-বিট উবুন্টুতে চালাতে হবে, তবে বাইনারি ফাইলটি 32-বিট নির্বাহযোগ্য কিনা তা আমি জানি না ।

আমি fileকমান্ডটি ব্যবহার করলাম , পরীক্ষামূলকভাবে পরীক্ষা করতে হবে এবং এটিই প্রত্যাবর্তিত ফলাফল:

জিএনইউ / লিনাক্স ২.6.২৪, বিল্ডআইডি [sha1] = 0x7329fa71323a6cd64823c2594338682065cd6e07 এর জন্য ELF 64-বিট এলএসবি এক্সিকিউটেবল, এক্স 86-64, সংস্করণ 1 (এসওয়াইএসভি), গতিশীলভাবে সংযুক্ত (শেয়ারড লিব ব্যবহার করে)

উত্তর:


29

শিরোনামে প্রশ্নের উত্তর আউটপুট শুরুর ঠিক সেখানে:

ELF 64-বিট এলএসবি এক্সিকিউটেবল, x86-64

ELF হল এক্সিকিউটেবল এবং লিংকযোগ্য ফর্ম্যাট , বাইনারি এক্সিকিউটেবল ফাইল ফর্ম্যাট লিনাক্স দ্বারা সাধারণত ব্যবহৃত হয়।

x86-64 হ'ল বাইনারিটির আর্কিটেকচার, মূলত এটিএমডি দ্বারা প্রবর্তিত x86 নির্দেশিকাটির 64-বিট সংস্করণ । আমার বাইরে যে কারণে, মাইক্রোসফ্ট এটিকে "x64" হিসাবে উল্লেখ করে তবে এটি একই জিনিস।

আপনার যদি কার্নেলের আর্কিটেকচার নিজেই জানতে চান তবে আপনি এটি ব্যবহার করতে পারেন uname -mpi। উদাহরণস্বরূপ, আমার সিস্টেমে, এটি মুদ্রণ করে:

x86_64 অজানা

যার অর্থ আমি একটি x86-64 কার্নেল চালাচ্ছি।

আপনি যদি নিজে সিপিইউতে আগ্রহী হন, /proc/cpuinfoলিনাক্স কার্নেল দ্বারা সনাক্ত করা সিপিইউ সম্পর্কে বিশদ অনুসন্ধান করুন।

একটি 32-বিট 80x86 এক্সিকিউটেবল হিসাবে চিহ্নিত করা fileহয়, উদাহরণস্বরূপ:

জিএনইউ / লিনাক্স ২.6.৮ এর জন্য ইএলএফ 32-বিট এলএসবি এক্সিকিউটেবল, ইন্টেল 80386 , সংস্করণ 1 (এসওয়াইএসভি), গতিশীলভাবে সংযুক্ত (শেয়ারড লিব ব্যবহার করে), কেটে ফেলা হয়েছে

যা আমাদের জানিয়েছে যে এটি একটি 32-বিট নির্বাহযোগ্য ইনটেল 80386 নির্দেশিকা সেট (সম্ভবত এক্সটেনশন সহ) ব্যবহার করে ut

মনে রাখবেন যে এটি 32-বিট বনাম 64-বিট আর্কিটেকচারের মতো সহজ নয়। উদাহরণস্বরূপ, লিনাক্স কার্নেল 32-বিট আর্কিটেকচার যেমন Intel 80386, AVR32 , S / 390 এবং Unicore32 সমর্থন করে । জিনিস 64-বিট দিকে, লিনাক্স উপভোগ্য পিএ-আরআইএসসি , x86-64 ', Itanium এবং Linux সংক্রান্ত এবং আলফা প্রমুখ। সমস্ত বিতরণ সমস্ত আর্কিটেকচারের জন্য বাইনারি সরবরাহ করে না, তবে (এবং আমি সন্দেহ করি এমন কোনও বিতরণ রয়েছে যা সমস্ত সমর্থিত সিপিইউ আর্কিটেকচারকে সমানভাবে লক্ষ্য করে)। সুতরাং যদি আপনি জানতে চান যে প্রদত্ত বাইনারি কোনও প্রদত্ত সিস্টেমে এক্সিকিউটেবল হবে কিনা, আপনার সিপিইজের স্থানীয় শব্দ আকারের চেয়ে আর্কিটেকচারটি বিবেচনা করা উচিত ।


1
"যে কারণগুলি আমার বাইরে" " আমি এখনও সেই দিনটি মনে করি যখন আমি জানতে পেরেছিলাম যে x 64 its৪ বিট এবং x86 ছিল 32 বিট।
পল ড্রাগার

1
@ পলড্রাপার "x86" শব্দটির একটি স্পষ্ট ব্যুৎপত্তি রয়েছে; এটি ইন্টেল থেকে x০xe series সিরিজের সিপিইউতে ফিরে আসে, 8008 বা 8080 এর মতো তাদের পূর্বসূরীদের থেকে আলাদা করে এবং এই দিনগুলিতে প্রায়শই 32-বিট (আইএ -32 নির্দেশিকা সেট) সক্ষম বৈকল্পিক (80386, 80486, পেন্টিয়াম এবং আরও নতুন) ব্যবহৃত হয় )। এই সাম্প্রতিকতম মডেল সংখ্যাগুলি প্রায়শই শুরুতে "80" বাদ দিয়ে সংক্ষেপিত হত, সুতরাং (বোঝানো 32-বিট) x86 386, 486, ইত্যাদির সাথে মেলে তবে আমি মডেল সংখ্যার সাথে কোনও 64-বিট সিপিইউ সম্পর্কে অবগত নই not অনুরূপ কাঠামো "64" এ শেষ হয়; অবশ্যই এএমডি বা ইন্টেল আজও এই জাতীয় নামকরণের স্কিম ব্যবহার করে না।
একটি সিভিএন

যদিও x64 খুব সাধারণ শব্দ is এলোমেলো উদাহরণ: মাইক্রোসফট /en-us/download/details.aspx?id=42482
পল ড্রাগার

@ পলড্রাপার এটি এখন মাইক্রোসফ্ট বিশ্বে প্রচলিত , তবে "x86" এর ক্ষেত্রে এটির ব্যুৎপত্তিটি এখনও অস্পষ্ট থেকে যায়।
একটি সিভিএন

মাইক্রোসফ্ট তাদের ইনস্টলারগুলিতে x86_64 কে AMD64 হিসাবে উল্লেখ করেছে
ফুক্লিভ

7

লিনাক্স বাইনারি এক্সিকিউটেবল ফাইলের 5 তম বাইট ( ELF ফর্ম্যাট, উইকিপিডিয়া দেখুন ) 32 বিট এক্সিকিউটেবলের জন্য 1, 64 বিট এক্সিকিউটেবলের জন্য 2।

"Foo" নামের একটি প্রোগ্রামের জন্য এটি দেখতে কমান্ড লাইনে টাইপ করুন

od -t x1 -t c foo | head -n 2

2

আপনি যদি 'মাথা' পাইপ এড়াতে চান তবে আপনি এটি করতে পারেন

od -An -t x1 -j 4 -N 1 foo

এটি foo যদি 32-বিট বাইনারি হয় তবে এটি 01 মুদ্রণ করবে এবং যদি এটি 64 হয় 02 তবে এটি কিছু নেতৃস্থানীয় স্পেস অন্তর্ভুক্ত করতে পারে - আপনি ফলাফলের সাথে কোনও স্বয়ংক্রিয় তুলনা করছেন কিনা তা জানার জন্য মূল্যবান।

যদি এটি একটি বেসিক উবুন্টু ডকার পাত্রে যেখানে দরকারী 'ফাইল' ইনস্টল করা হয় নি এটি পাওয়া যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.