জাভা, ভিবি.এনইটি, সি #, অ্যাকশনস্ক্রিপ্ট 3.0.০ ইত্যাদির মতো বাইটকোড-ভিত্তিক ভার্চুয়াল মেশিনের ভাষাগুলির সাথে আপনি কখনও কখনও শুনতে পান যে ইন্টারনেট থেকে কিছুটা ডিসপ্যাম্পিলার ডাউনলোড করা, এটির মাধ্যমে একটি ভাল সময় বাইটকোড চালানো কত সহজ is প্রায়শই, সেকেন্ডের ক্ষেত্রে মূল উত্স কোড থেকে খুব বেশি দূরে নয় এমন কিছু জিনিস নিয়ে আসুন। অনুমান করা যায় যে এই ধরণের ভাষা বিশেষভাবে এতে ঝুঁকিপূর্ণ।
আমি সম্প্রতি ভাবতে শুরু করেছি যে দেশীয় বাইনারি কোড সম্পর্কিত আপনি কেন এই বিষয়ে বেশি কিছু শুনছেন না, আপনি কমপক্ষে জানেন যে এটি কোন ভাষায় মূল ভাষায় লেখা হয়েছিল (এবং এইভাবে কোন ভাষায় বিভক্ত করার চেষ্টা করতে হবে)। দীর্ঘ সময়ের জন্য, আমি অনুভব করেছি এটি কেবল কারণ দেশীয় মেশিনের ভাষা সাধারণত বাইটকোডের চেয়ে অনেক বেশি ক্রেজিয়ার এবং আরও জটিল।
তবে বাইটকোড কেমন দেখাচ্ছে? দেখে মনে হচ্ছে:
1000: 2A 40 F0 14
1001: 2A 50 F1 27
1002: 4F 00 F0 F1
1003: C9 00 00 F2
এবং নেটিভ মেশিন কোডটি (হেক্সে) মতো দেখতে কেমন? এটি অবশ্যই এর মতো দেখাচ্ছে:
1000: 2A 40 F0 14
1001: 2A 50 F1 27
1002: 4F 00 F0 F1
1003: C9 00 00 F2
এবং নির্দেশাবলী কিছুটা একই মনের ফ্রেম থেকে আসে:
1000: mov EAX, 20
1001: mov EBX, loc1
1002: mul EAX, EBX
1003: push ECX
সুতরাং, কিছু দেশীয় বাইনারিগুলিকে বিভক্ত করার চেষ্টা করার জন্য ভাষাটি দেওয়া হয়েছে, সি ++ বলুন, এটি সম্পর্কে এত কঠিন কী? কেবলমাত্র দুটি ধারণা যা তাৎক্ষণিকভাবে মনে আসে তা হ'ল 1) এটি আসলে বাইটোকোডের চেয়ে অনেক বেশি জটিল বা 2) অপারেটিং সিস্টেমগুলি প্রোগ্রামগুলি পৃষ্ঠাতে ছড়িয়ে দেওয়ার এবং তাদের টুকরো টুকরো টুকরো করার প্রবণতা অনেকগুলি সমস্যার কারণ হয়ে দাঁড়ায়। যদি এই সম্ভাবনার মধ্যে একটি সঠিক হয়, দয়া করে ব্যাখ্যা করুন। তবে যেভাবেই হোক না কেন, আপনি কখনই মূলত এটি শুনেন না?
বিঃদ্রঃ
আমি একটি উত্তর গ্রহণ করতে চলেছি, তবে আমি প্রথমে কিছু উল্লেখ করতে চাই। প্রায় প্রত্যেকেই মূল বিষয়টির কোডের বিভিন্ন টুকরা একই মেশিন কোডে ম্যাপ করতে পারে এই বিষয়টি আবার উল্লেখ করছে; স্থানীয় ভেরিয়েবলের নামগুলি হারিয়ে গেছে, আপনি জানেন না মূলত কোন ধরণের লুপ ব্যবহৃত হয়েছিল ইত্যাদি etc.
তবে দু'জনের উদাহরণ যেমন সবেমাত্র উল্লেখ করা হয়েছে তা আমার দৃষ্টিতে তুচ্ছ ধরনের। উত্তরগুলির মধ্যে কিছু উত্তর দেয় যে মেশিন কোড এবং মূল উত্সের মধ্যে পার্থক্য এই তুচ্ছ কিছু থেকে মারাত্মকভাবে অনেক বেশি।
তবে উদাহরণস্বরূপ, যখন এটি স্থানীয় ভেরিয়েবলের নাম এবং লুপের ধরণের মতো হয়ে আসে তখন বাইটকোডও এই তথ্যটি হারাতে পারে (কমপক্ষে অ্যাকশনস্ক্রিপ্ট 3.0.০ এর জন্য)। আমি যে একটি decompiler মাধ্যমে কাপড় ফিরে সামনে টানা করেছি, এবং আমি সত্যিই গ্রাহ্য করা হয়নি কিনা একটি পরিবর্তনশীল বলা হয় strMyLocalString:String
বা loc1
। আমি এখনও সেই ছোট, স্থানীয় স্কোপগুলিতে সন্ধান করতে পারি এবং দেখতে পারি যে এটি কোনও সমস্যা ছাড়াই কীভাবে ব্যবহৃত হচ্ছে। এবং একটি for
লুপ প্রায় অনেক একই একই জিনিসwhile
লুপ, আপনি যদি এটি সম্পর্কে চিন্তা। এমনকি আমি যখন আইআরএফুসেটারের মাধ্যমে উত্সটি চালিত করব (যা সিকিউরএসডাব্লুএফএফ থেকে পৃথকভাবে সদস্যের পরিবর্তনশীল এবং ফাংশন নামগুলির তুলনায় বেশি কিছু করে না) তখনও দেখে মনে হচ্ছিল যে আপনি কিছু নির্দিষ্ট ভেরিয়েবল এবং ফাংশনকে ছোট শ্রেণিতে বিচ্ছিন্ন করতে শুরু করতে পারেন, চিত্র তারা কীভাবে ব্যবহৃত হচ্ছে তা খুঁজে বার করুন, তাদের নিজের নিজের নাম দিন এবং সেখান থেকে কাজ করুন।
এটি বড় বিষয় হওয়ার জন্য, মেশিন কোডটির চেয়ে আরও অনেক বেশি তথ্য হারাতে হবে এবং উত্তরগুলির মধ্যে কিছুটি এর মধ্যে চলে go