মেশিন কোডটি কি অন্য কোনও স্থাপত্যে অনুবাদ করা যেতে পারে?


11

সুতরাং এটি এআরএম এ উইন্ডোজ সার্ভার চালানোর বিষয়ে একটি প্রশ্নের সাথে সম্পর্কিত । সুতরাং আমার প্রশ্নের ভিত্তি হ'ল, কোনও আর্কিটেকচারে বাইনারি চালানোর জন্য মেশিন কোডটি অন্য একটি আর্কিটেকচার থেকে অনুবাদ করা যেতে পারে যা চালানোর জন্য সংকলিত হয়েছিল তার চেয়ে আলাদা different

কিউইএমইউ এবং অন্যান্য ইমুলেটরগুলি উড়ানের নির্দেশাবলীটি অনুবাদ করতে পারে এবং তাই এটি কম্পিউটারে নির্বাহযোগ্য চালানো যায় যা এটি সঙ্কলন করা হয়নি। প্রক্রিয়াটি ত্বরান্বিত করার জন্য উড়ানের পরিবর্তে এই অনুবাদটি কেন আগে না? আমার সমাবেশ সম্পর্কে কিছুটা সীমাবদ্ধ জ্ঞান থেকে, বেশিরভাগ নির্দেশাবলীর মতো MOV, ADDএবং অন্যান্যগুলি আর্কিটেকচার জুড়ে বহনযোগ্য হওয়া উচিত।

সমস্ত মেশিন টুরিং সম্পূর্ণ হওয়ার কারণে যে কোনও কিছুতে সরাসরি ম্যাপিং নেই এমন কিছু নির্দেশাবলীর ম্যাপ করা যেতে পারে। এটি করা কি খুব জটিল হবে? আমি কি অপরিচিত এমন কোনও কারণে এটি কি কাজ করবে না? এটি কি কাজ করে তবে এমুলেটর ব্যবহারের চেয়ে ভাল ফল পাওয়া যায় না?


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

উত্তর:


6

সংক্ষিপ্ত উত্তর : আপনি একটি সংকলিত, সংযুক্ত এক্সিকিউটেবল অনুবাদ করতে পারবেন না। প্রযুক্তিগতভাবে সম্ভব হলেও এটি সম্পাদন করা অত্যন্ত অসম্ভব (নীচে দেখুন)। তবে আপনার যদি সমাবেশের উত্স ফাইল থাকে (নির্দেশাবলী এবং লেবেলযুক্ত) তবে এটি করা খুব সম্ভব (যদিও আপনি যদি কোনওভাবে সমাবেশের উত্সটি অর্জন করেন তবে প্রোগ্রামটি যদি সমাবেশে না লেখা হয় তবে আপনার মূল প্রোগ্রামের উত্স কোড হিসাবে থাকা উচিত) ভাল, যাতে আপনি বিভিন্ন আর্কিটেকচারটি শুরু করার জন্য এটি সংকলন করা ভাল হন)।


দীর্ঘ উত্তর :

কিউইএমইউ এবং অন্যান্য ইমুলেটরগুলি উড়ানের নির্দেশাবলীটি অনুবাদ করতে পারে এবং তাই এটি কম্পিউটারে নির্বাহযোগ্য চালানো যায় যা এটি সঙ্কলন করা হয়নি। প্রক্রিয়াটি ত্বরান্বিত করার জন্য উড়ানের পরিবর্তে এই অনুবাদটি কেন আগে না?

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

ধরা যাক আপনাকে XYZআরও দুটি নির্দেশাবলীর সাথে নির্দেশকে প্রতিস্থাপন করতে হবে ABCএবং DEF। এখন আপনি সেই কার্যকর অবস্থান থেকে সমস্ত প্রোগ্রামের সমস্ত আপেক্ষিক / অফসেটের ঠিকানাগুলি কার্যকরভাবে স্থানান্তরিত করেছেন, সুতরাং আপনাকে বিশ্লেষণ করে পুরো প্রোগ্রামটি দিয়ে যেতে হবে এবং অফসেটগুলি (পরিবর্তনের আগে এবং পরে উভয়ই) আপডেট করতে হবে। এখন, আসুন যাক অফসেটগুলির মধ্যে একটিতে উল্লেখযোগ্যভাবে পরিবর্তন ঘটে - এখন আপনাকে অ্যাড্রেসিং মোডগুলি পরিবর্তন করতে হবে, যা ঠিকানার আকার পরিবর্তন করতে পারে। এটি আপনাকে পুরো ফাইলটি পুনরায় স্ক্যান করতে এবং সমস্ত ঠিকানাগুলি পুনরায় গণনা করতে বাধ্য করবে এবং এরপরে এবং চতুর্থ।

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

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

হ্যাঁ, তবে আমি উপরে বর্ণিত বিষয়গুলি দেখুন। মেশিনের শব্দের আকার সম্পর্কে কী? ঠিকানার দৈর্ঘ্য? এটির কি একই ঠিকানা ঠিকানা রয়েছে? আবার, আপনি কেবল নির্দেশাবলী "সন্ধান এবং প্রতিস্থাপন" করতে পারবেন না। প্রোগ্রামের প্রতিটি বিভাগের একটি নির্দিষ্টভাবে সংজ্ঞায়িত ঠিকানা থাকে। যখন কোনও প্রোগ্রাম একত্রিত হয় তখন অন্যান্য লেবেলে জাম্পগুলি আক্ষরিক বা অফসেট মেমরি ঠিকানার সাথে প্রতিস্থাপন করা হয়।

সমস্ত মেশিন টুরিং সম্পূর্ণ হওয়ার কারণে যে কোনও কিছুতে সরাসরি ম্যাপিং নেই এমন কিছু নির্দেশাবলীর ম্যাপ করা যেতে পারে। এটি করা কি খুব জটিল হবে? আমি কি অপরিচিত এমন কোনও কারণে এটি কি কাজ করবে না? এটি কি কাজ করে তবে এমুলেটর ব্যবহারের চেয়ে ভাল ফল পাওয়া যায় না?

আপনি 100% সঠিক যে উভয়ই সম্ভব এবং এটি আরও দ্রুত হবে । যাইহোক, এটি সম্পাদন করার জন্য একটি প্রোগ্রাম লেখা অবিশ্বাস্যরূপে কঠিন এবং অত্যন্ত অসম্ভব, যদি আমি উপরে উল্লিখিত সমস্যাগুলি বাদ দিয়ে কিছু না করি।

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

কয়েক হাজার নির্দেশ সহ একটি প্রোগ্রামের জন্য এটি কয়েক লক্ষ পাসের ক্ষেত্রে না হলেও দশকের প্রয়োজন হবে। অপেক্ষাকৃত ছোট প্রোগ্রামগুলির জন্য, এটি সম্ভব হতে পারে তবে মনে রাখবেন যে প্রোগ্রামে মেশিনের নির্দেশের সংখ্যা সহ পাসের সংখ্যা তাত্পর্যপূর্ণভাবে বৃদ্ধি পাবে। পর্যাপ্ত আকারের কোনও প্রোগ্রামের জন্য এটি অসম্ভবের কাছাকাছি।


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

@DanH যদি আপনি উৎস বস্তুর কোড আছে, আপনি প্রায় কাছাকাছি সমাবেশ উৎস (আছে না মেশিন কোড)। অবজেক্ট ফাইলটিতে মেশিন কোডের নামযুক্ত (পড়ুন: লেবেলযুক্ত) সিকোয়েন্সগুলি একসাথে যুক্ত থাকতে হবে। সমস্যাটি তখন আসে যখন আপনি কোনও এক্সিকিউটেবলের সাথে অবজেক্ট কোড ফাইলগুলি লিঙ্ক করেন। এই ছোট বিভাগগুলি পরিচালনা করা যায় (বা বিপরীত ইঞ্জিনিয়ারড) তবে সম্পূর্ণ লিঙ্কযুক্ত নির্বাহযোগ্য।
ব্রেকথ্রু

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

2

হ্যাঁ, আপনি যা পরামর্শ দেন তা হতে পারে এবং হয়ে গেছে। এটি খুব সাধারণ নয় এবং আমি প্রযুক্তি ব্যবহার করে এমন কোনও বর্তমান সিস্টেম সম্পর্কে জানি না, তবে এটি প্রযুক্তিগত সম্ভাব্যতার ক্ষেত্রের মধ্যে অবশ্যই ভাল।

এটি এখন আমাদের কাছে এমনকি অশোধিত "বহনযোগ্যতা" অর্জনের আগে এক সিস্টেম থেকে অন্য সিস্টেমে কোডের পোর্টিং সক্ষম করার জন্য এটি অনেক কিছু করা হত। এটিতে "উত্স" এর জটিল বিশ্লেষণের প্রয়োজন ছিল এবং কোড পরিবর্তন এবং অন্যান্য অডব্লাল অনুশীলন দ্বারা স্টিমিড করা যেতে পারে, তবে এটি এখনও করা হয়েছিল।

সাম্প্রতিককালে, আইবিএম সিস্টেম / 38 - আইসরিজ - সিস্টেম আই এর মতো সিস্টেমগুলি অন্তর্নিহিত নির্দেশিকা সেট আর্কিটেকচারের মধ্যে বহনযোগ্যতা সক্ষম করার জন্য সংকলিত প্রোগ্রামগুলিতে সঞ্চিত মধ্যবর্তী কোডের (জাভা বাইটকোডগুলির অনুরূপ) বহনযোগ্যতার সুযোগ নিয়েছে।


সম্মত হন যে এটি করা হয়েছে, সাধারণত অনেক পুরানো (সহজ) নির্দেশাবলী সেট সহ। পুরানো 7XX বাইনারি প্রোগ্রামগুলি সিস্টেম / 360 এ রূপান্তর করতে 1970 এর দশকে একটি আইবিএম প্রকল্প ছিল।
কর্ষণ

1

মেশিন কোড নিজেই আর্কিটেকচার নির্দিষ্ট।

যে ভাষাগুলি একাধিক আর্কিটেকচার জুড়ে সহজে বহনযোগ্যতার সুযোগ দেয় (সম্ভবত জাভা সবচেয়ে বেশি পরিচিত) তাদের কাজ করার জন্য কোনও মেশিনে দোভাষী বা ফ্রেমওয়ার্কগুলি ইনস্টল করা প্রয়োজন, এটি খুব উচ্চ স্তরের হয়ে থাকে।

এই ফ্রেমওয়ার্কগুলি বা দোভাষী তাদের প্রত্যেকটি নির্দিষ্ট সিস্টেম আর্কিটেকচারের জন্য রচিত যা তারা চলবে এবং তাই তারা "সাধারণ" প্রোগ্রামের চেয়ে কোনও বহনযোগ্য নয় in


2
সংকলিত ভাষাগুলিও বহনযোগ্য, কেবল বর্ণিত ভাষাগুলি নয়, এটি সংকলক যা আর্কিটেকচার নির্দিষ্ট কারণ এটি চূড়ান্তভাবে কোডটির অনুবাদ করে যা এটি প্ল্যাটফর্মটিতে রয়েছে তা সনাক্ত করতে পারে to পার্থক্যটি কেবল হ'ল সংকলিত ভাষাগুলি সংকলনের সময় অনুবাদ করা হয় এবং ব্যাখ্যা করা ভাষাগুলি প্রয়োজন অনুসারে লাইন দ্বারা অনুবাদ করা হয়।
মাক্লেড

1

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


1

আপনি যে প্রক্রিয়াটি বর্ণনা করেছেন তাকে স্ট্যাটিক রিকম্পিলেশন বলা হয়, এবং এটি সাধারনত প্রয়োগযোগ্য উপায়ে নয়। এর অর্থ এটি সম্ভব নয়, এটি বহুবার করা হয়েছে, তবে এটির জন্য ম্যানুয়াল কাজ দরকার।

গবেষণা করার মতো অনেক historicalতিহাসিক উদাহরণ রয়েছে তবে তারা আধুনিক উদ্বেগগুলি প্রদর্শন করতে কম পারছেন। আমি দুটি উদাহরণ পেয়েছি যা মূলত কোনও সম্পূর্ণ সন্দেহবাদীদের এমন প্রশ্ন করা উচিত যাঁরা দাবি করেন যে সমস্ত কিছু কঠিন বলে দাবি করা অসম্ভব।

প্রথমে এই লোকটি একটি NES রমের জন্য একটি সম্পূর্ণ স্ট্যাটিক আর্টেকচার এবং প্ল্যাটফর্ম করেছিল। http://andrewkelley.me/post/jamulator.html

তিনি কিছু খুব ভাল পয়েন্ট তৈরি করেন, তবে এই সিদ্ধান্তে পৌঁছে যে জেআইটি এখনও আরও ব্যবহারিক is আমি সত্যিই নিশ্চিত নই যে কেন তিনি ইতিমধ্যে জানতেন না যে এই পরিস্থিতির জন্য, এটি বেশিরভাগ লোকেরা বিবেচনা করে এমন পরিস্থিতি হতে পারে। কোনও শর্টকাট না নেওয়া, সম্পূর্ণ চক্রের নির্ভুলতার দাবি করা এবং মূলত কোনও এবিআই ব্যবহার করা উচিত নয়। যদি এটি সমস্ত কিছু ছিল, আমরা ধারণাটি ট্র্যাশে ফেলে দিতে পারতাম এবং এটি একটি দিন বলতে পারি, তবে এটি সব ছিল না এবং কখনই ছিল না .... আমরা কীভাবে এটি জানি? কারণ সমস্ত সফল প্রকল্পগুলি এই পদ্ধতির ব্যবহার করেনি।

এখন সম্ভাবনার চেয়ে কম স্পষ্ট, আপনার ইতিমধ্যে প্ল্যাটফর্মটি উত্সাহিত করুন ... লিনাক্স এআরএম হ্যান্ডহেল্ডে স্টারক্র্যাফ্ট? হ্যাঁ, আপনি যখন ডায়নামিকভাবে করবেন ঠিক তেমন কাজটিতে সীমাবদ্ধ রাখবেন না তখন এপ্রোচটি কাজ করে। উইনলিব ব্যবহার করে উইন্ডোজ প্ল্যাটফর্ম কলগুলি সমস্ত দেশীয়, আমাদের যে সমস্ত বিষয় নিয়ে চিন্তা করতে হবে তা হ'ল আর্কিটেকচার।

http://www.geek.com/games/starcraft-has-been-reverse-engineered-to-run-on-arm-1587277/

আমি ডোনটকে ডলার নিক্ষেপ করবো যে মন্দা প্রায় নগণ্য, বিবেচনা করে যে এআরএম হ্যান্ডহেল্ড পান্ডোরা পাই থেকে কিছুটা শক্তিশালী। তিনি যে সরঞ্জামগুলি ব্যবহার করেছিলেন সেগুলি হ'ল এই ভান্ডারগুলিতে।

https://github.com/notaz/ia32rtools

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


0

তাত্ত্বিকভাবে, হ্যাঁ এটি করা যেতে পারে। যে বড় সমস্যাটি খেলায় আসে তা হ'ল একটি অপারেটিং সিস্টেমের (বা কার্নেল) জন্য একটি অ্যাপ্লিকেশন অন্যটিতে অনুবাদ করা। উইন্ডোজ, লিনাক্স, ওএসএক্স এবং আইওএস কার্নেলগুলি নিম্ন স্তরের ক্রিয়াকলাপগুলির মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে, those ডিভাইসগুলির জন্য সমস্ত অ্যাপ্লিকেশন ব্যবহার করতে হয়।

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

হালনাগাদ

নীচে বেশ কয়েকটি মন্তব্য আমার প্রতিক্রিয়াটির সাথে একমত নয় বলে মনে হয়, তবে আমি মনে করি তারা আমার বক্তব্য মিস করছে। আমার জ্ঞানের মতে, এমন কোনও অ্যাপ্লিকেশন নেই যা কোনও আর্কিটেকচারের জন্য এক্সিকিউটেবল বাইটের ক্রম নিতে পারে, এটি বাইটকোড স্তরে পচন করতে পারে, অন্তর্নিহিত ওএস কার্নেলের কল সহ বহির্মুখী লাইব্রেরিতে সমস্ত প্রয়োজনীয় কল সহ এবং এটি অন্য সিস্টেমের জন্য পুনরায় সংযুক্ত করে এবং সংরক্ষণ করতে পারে ফলস্বরূপ নির্বাহযোগ্য বাইটকোড । অন্য কথায়, এমন কোনও অ্যাপ্লিকেশন নেই যা নোটপ্যাড.এক্সির মতো সাধারণ কিছু নিতে পারে, এটি যে ছোট ছোট 190 কে ফাইলটি পচন করতে পারে এবং লিনাক্স বা ওএসএক্সে চলতে পারে এমন অ্যাপ্লিকেশনটিতে এটি 100% পুনরায় সংযুক্ত করে।

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

আপনি যদি অ্যাপ্লিকেশনটিতে পুনরায় সংশ্লেষ করতে চান এবং এটিকে অন্য কোনও আর্কিটেকচারে চালিত করতে চান তবে সেই সমস্ত বাইট-কোড অবশ্যই বিযুক্ত করতে হবে।

ওয়াইনের মতো অ্যাপ্লিকেশনগুলি বাইট স্তরে উইন্ডোজ বাইনারিগুলি ব্যাখ্যা করে। তারা কার্নেলের কাছে কলগুলি সনাক্ত করে এবং সেই কলগুলি সম্পর্কিত লিনাক্স ফাংশনগুলিতে অনুবাদ করে বা তারা উইন্ডোজ পরিবেশকে অনুকরণ করে। তবে, এটি কোনও বাইট-বাই-বাইট নয় (বা অপকোডের জন্য অপকোড) প্রতিস্থাপন নয়। এটি একটি ফাংশন-ফর-ফাংশন অনুবাদ এবং এটি বেশ কিছুটা আলাদা।


এটি মোটেই তাত্ত্বিক নয়। এবং প্রচুর অ্যাপ্লিকেশন রয়েছে যা বিভিন্ন অপারেটিং সিস্টেমে অন্যান্য বাইনারি চালায়। আপনি ওয়াইন শুনেছেন? এটি বিভিন্ন ওএস, যেমন লিনাক্স, সোলারিস, ম্যাক ওএসএক্স, বিএসডি এবং অন্যান্যগুলিতে উইন্ডোজ বাইনারিগুলি চালায়।
কেল্টারি

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

0

মনে হচ্ছে সমস্ত বিশেষজ্ঞ এই বিষয়টি অনুপস্থিত: 'অনুবাদ' জটিল তবে কম্পিউটারের জন্য খুব উপযুক্ত (কোনও বুদ্ধিমান, কেবল শ্রমসাধ্য নয়)। তবে অনুবাদ করার পরে প্রোগ্রামগুলির ওএস সমর্থন দরকার, যেমন: লিনাক্সে গেটউইন্ডো ভার্সন নেই। এটি সাধারণত এমুলেটর সরবরাহ করে (খুব বড়)। সুতরাং আপনি একটি সাধারণ প্রোগ্রামগুলির 'প্রাক-অনুবাদ' করতে পারেন তবে স্বতন্ত্রভাবে চালনার জন্য আপনাকে একটি বিশাল লিবারির সাথে লিঙ্ক করতে হবে। প্রতিটি উইন্ডোগুলির প্রোগ্রামগুলির নিজস্ব কার্নেল.ডিল + ইউজার.ডিএল + শেল.ডিএল নিয়ে আসে ...


এটি কেবল শ্রমসাধ্য নয়, এর জন্য বুদ্ধি প্রয়োজন। উদাহরণস্বরূপ, বলুন যে আপনি এমন কয়েকটি গণনা দেখছেন যার ফলাফল আপনি যে ঠিকানাটিতে গিয়েছিলেন তা নির্ধারণ করে, যা কোনও একক নির্দেশের মতো দেখা যায় এমন কোনও কিছুর মাঝে থাকতে পারে।
ডেভিড শোয়ার্জ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.