7 , 2 বাইট
7 একটি 3-বিট অক্ষর সেট ব্যবহার করে, তবে বাইটগুলিতে প্যাক করা ইনপুট নেয় (এবং মেটা অনুসারে, সাব-বাইট অক্ষর সেটগুলির সাথে ডিস্কে ফাইলের জন্য বাইট ব্যবহার করে গণনা করা হয় )। xxd
প্রোগ্রামটির একটি ডাম্প এখানে রয়েছে :
00000000: 4cf4 L.
7 জন দোভাষীকে এই ফাইলটি দেওয়ার সময়, এটি নিম্নলিখিত প্রোগ্রামটি আউটপুট দেবে:
00000000: 4fa6 7f O..
যার ফলে আবার আসল প্রোগ্রামটি আউটপুট হবে।
তাহলে এখানে কি হচ্ছে? কোনও উত্স পাঠের সাথে জড়িত নেই (আসলে, আমি মনে করি না যে এটি উত্সটি 7 সালে পড়া সম্ভব) যদিও তত যুক্তিযুক্তভাবে প্রোগ্রামটি অন্যভাবে প্রতারণা করছে; আমার সম্পর্কে আপনি কী মনে করেন জানি. প্রোগ্রামটি কীভাবে কাজ করে তা এখানে। (নোট করুন যে প্রতিটি 7 কমান্ডের দুটি রূপ রয়েছে, যার কয়েকটিটির নাম নেই এবং মূল প্রোগ্রামে উপস্থিত হতে পারে না twelve বারে 12 টি কমান্ড রয়েছে, ছয়টি জোড়ায় I'm কমান্ডগুলি, এবং সক্রিয় কমান্ডের কোনও নাম না থাকলে, আমি এটিকে সংশ্লিষ্ট প্যাসিভ কমান্ডের মতো একই নাম দিচ্ছি এবং পার্থক্য করার জন্য সাহসের উপর নির্ভর করছি both উভয়ের নাম দেওয়া হয়েছে, যেমন, 7
যা সক্রিয় রূপ 1
, প্রতিটি কমান্ডের নিজস্ব নাম হয় এবং সাহসী কেবল সিনট্যাক্স হাইলাইট করে)
231 7 23 মূল প্রোগ্রাম, অষ্টালে প্যাক করা
231 স্ট্যাকের উপর 237 চাপুন
23 স্ট্যাকের উপরে 23 চাপুন
(অন্তর্নিহিত) প্রোগ্রামে স্ট্যাকের শীর্ষের একটি অনুলিপি যুক্ত করুন
স্ট্যাকের 2 সদৃশ শীর্ষ (বর্তমানে 23 )
3 স্ট্যাকের আউটপুট শীর্ষ, দ্বিতীয় স্ট্যাক উপাদানটির পপ
এই মুহুর্তে, 7 জন অনুবাদক দেখতে পাবেন যে স্ট্যাকের শীর্ষে কমান্ডগুলি রয়েছে ( 2
এবং 3
) যা উপস্থাপনযোগ্য নয়, তাই এটি স্ট্যাকের শীর্ষে পালিয়ে যায়, 723
যা উত্পাদন করে (যা)। প্রথম কমান্ড আউটপুট আউটপুট ফর্ম্যাট নির্বাচন করে; এই ক্ষেত্রে, এটি 7 ফর্ম্যাট, "প্রোগ্রামের মতো আউটপুটটিকে ফর্ম্যাট করুন"। সুতরাং কমান্ডগুলি আউটপুটকে বাইটে প্যাক করবে। তারপরে প্রোগ্রামটি চালিয়ে যায়:
231 7 23 23
(অন্তর্নিহিত) প্রোগ্রামে স্ট্যাকের শীর্ষের একটি অনুলিপি যুক্ত করুন
স্ট্যাকের 2 সদৃশ শীর্ষ (বর্তমানে 237 )
3 স্ট্যাকের আউটপুট শীর্ষ, দ্বিতীয় স্ট্যাকের উপাদানটি পপ করুন
7 স্ট্যাকের উপর একটি খালি উপাদানটি পুশ করুন
এই মুহুর্তে, স্ট্যাকের খালি স্ট্যাক উপাদানগুলি ছাড়া আর কিছুই নেই, সুতরাং প্রোগ্রামটি প্রস্থান করে। আমরা 23
আগে আউটপুট । যদি আমরা পালাতে পারি 237
(এবং আমাদের তা করতে হবে, কারণ এটিতে উপস্থাপনযোগ্য কমান্ড রয়েছে), আমরা পাই 7231
। এটি সরাসরি আউটপুট পায়, প্রোগ্রামটির চূড়ান্ত আউটপুট তৈরি করে 237231
( প্রোগ্রাম হিসাবে একইভাবে ফর্ম্যাট করা, অর্থাৎ বাইটস মধ্যে প্যাক করা)। এটাই 4fa67f
। (এটি লক্ষ করা যায় যে 1
আউটপুটকে প্রভাবিত করার ক্ষেত্রে পুরোপুরি অর্থহীন ছিল; কেবলমাত্র দুটি প্রোগ্রামকেই আলাদা করে তোলা হবার একমাত্র কারণ))
চলমান 237231
প্রায় একইভাবে এগিয়ে যায়; পার্থক্যটি হ'ল 1
প্রথম মুদ্রণের ঠিক পরেই অকেজো চালিত হয় (এবং খালি উপাদানটি দ্বিতীয়বার প্রোগ্রামের বর্তমান শেষের দিকে পৌঁছে যায়) licit আবার, 231
আউটপুট নিজেই শেষ হয়, 23
শেষগুলি আউটপুট আউট করে তার আগে একটি 7
, এবং আমরা পাই 231723
, আসল প্রোগ্রামটি।
পর্যবেক্ষক লক্ষ করতে পারেন যে দুটি প্রোগ্রাম, ভাষার "নেটিভ" অষ্টালে একই দৈর্ঘ্য হওয়া সত্ত্বেও, ডিস্কে পৃথক দৈর্ঘ্য। কারণ 7 টি প্রোগ্রাম 1 বিটগুলির একটি স্বেচ্ছাসেবী সংখ্যার সাথে প্যাড করা যেতে পারে, এবং প্যাকযুক্ত ফর্ম্যাটটি পিছনের প্যাডিংগুলি ত্যাগ করে। এখানে এনকোডিং কীভাবে ঘটে তা এখানে:
2 3 1 7 2 3
010011001111010011(1...)
4 c f 4 padding
অন্য কথায়, দুটি বাইট, 4C
F4
প্রোগ্রামটি উপস্থাপনের জন্য যথেষ্ট, তাই আমি কেবল এটিই ব্যবহার করেছি।