আমি সি # শিখছি, তাই আমি একটু সি # প্রোগ্রাম যা বলছেন তৈরি 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
দৌড়েন তবে আমি আপনার প্রশ্নটি পেয়েছি এবং উত্তরটি আরও যুক্তিসঙ্গত বলে মনে করেছি (যা ক্ষেত্রে অবশ্যই বিনফম্যাট-সমর্থন ব্যবহার করে