আমি সি # শিখছি, তাই আমি একটু সি # প্রোগ্রাম যা বলছেন তৈরি Hello, World!, তারপর সঙ্গে এটি কম্পাইল mono-cscএবং সঙ্গে এটি দৌড়ে mono:
$ mono-csc Hello.cs
$ mono Hello.exe
Hello, World!
আমি লক্ষ্য করেছি যে, যখন আমি আঘাত TABমধ্যে bash, Hello.exeএক্সিকিউটেবল চিহ্নিত করা হয়েছিল। প্রকৃতপক্ষে, এটি ফাইলের নাম লোড করে কেবল একটি শেল দিয়ে চলে!
Hello.exeহয় না একটা মজার ফাইল এক্সটেনশন সহ একটি ELF ফাইল:
$ readelf -a Hello.exe
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
$ xxd Hello.exe | head -n1
00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 MZ..............
MZএর অর্থ এটি একটি মাইক্রোসফ্ট উইন্ডোজ স্থিরভাবে সংযুক্ত কার্যকর। এটি একটি উইন্ডোজ বাক্সে ফেলে দিন এবং এটি চলবে (হওয়া উচিত)।
আমি wineইনস্টল করেছি, তবে wine, উইন্ডোজ অ্যাপ্লিকেশনগুলির জন্য একটি সামঞ্জস্য স্তর Hello.exeহিসাবে monoএটি চালানোর জন্য এবং সরাসরি এটি সম্পাদন করতে প্রায় 5x সময় লাগে , সুতরাং এটি wineএটি চালায় না।
আমি ধরে নিচ্ছি যে এখানে কিছু monoকার্নেল মডিউল ইনস্টল করা আছে monoযার সাথে execসিস্কেল / গুলি বাধা আছে, বা বাইনারিগুলি শুরু হয় যা শুরু হয় 4D 5A, lsmod | grep monoএবং বন্ধুরা একটি ত্রুটি ফিরে দেয়।
এখানে কী চলছে এবং কার্নেল কীভাবে জানতে পারে যে এই নির্বাহযোগ্যটি বিশেষ?
কেবল প্রমাণের জন্য এটি আমার শেল ওয়ার্কিং যাদু নয়, আমি এটি চালানোর জন্য ক্র্যাপ শেল (ওরফে sh) ব্যবহার করেছি এবং এটি এখনও স্থানীয়ভাবে চালিত হয়।
এখানে প্রোগ্রামটি সম্পূর্ণ, যেহেতু একজন মন্তব্যকারী আগ্রহী ছিল:
using System;
class Hello {
/// <summary>
/// The main entry point for the application
/// </summary>
[STAThread]
public static void Main(string[] args) {
System.Console.Write("Hello, World!\n");
}
}
program codefile, আপনার ক্ষেত্রে প্রোগ্রামটি মনো, যখন আমার উদাহরণগুলিতে পিএইচপি, পাইথন, পার্ল এবং জাভা অন্তর্ভুক্ত রয়েছে। আমি সন্দেহ করি যদি মনো থেকে কোডের মাধ্যমে মৃত্যুর পরেও .exe ফাইল ব্যতীত অন্যগুলিতেও এক্সটেনশানটির অনুমতি দেয়। এটি উইন্ডোতে একেবারেই নির্ভর করা উচিত নয় কারণ শেষ পর্যন্ত এটি একটি সংকলিত কোড কার্যকর করে। তবে যদি আপনার উত্স ফাইলটিতে উইন্ডোজ কেবলমাত্র এপিআইয়ের মতো কিছু নির্ভরশীল কোড থাকে তবে অবশ্যই সেই এক্স ফাইলটি চালানোর জন্য আপনার অবশ্যই ওয়াইন দরকার।
/etc/magicবা /usr/share/file/magic(বা অনুরূপ যাদুকরী অবস্থান) এমন ফাইল যা এতে করতে সক্ষম হওয়ার জন্য প্রয়োজনীয় তথ্য রয়েছে।
$ foo.jarতুলনায় এটি করতে পারেন $ java -jar foo.jar।
php hello.phpবাpython hello.pyবাperl hello.plবা জাভা মত কম্পাইল ভাষা ক্ষেত্রেjava helloতারাও তাদের কোন এক্সিকিউটেবল কিন্তু একটি প্রোগ্রাম পড়া হয় চালানো এবং ফাইল চালানো হবে। তবে আপনি যদি এর./hello.exeপরিবর্তেmono hello.exeদৌড়েন তবে আমি আপনার প্রশ্নটি পেয়েছি এবং উত্তরটি আরও যুক্তিসঙ্গত বলে মনে করেছি (যা ক্ষেত্রে অবশ্যই বিনফম্যাট-সমর্থন ব্যবহার করে