অন্য দুটি উত্তর (লেখার সময়) বাধা এবং আইডিটি সম্পর্কে কথা বলে। এটি সঠিক, তবে, আধুনিক ইন্টেল-এস্কু সিপিইউতে, কার্নেলটিতে কল করার জন্য তিনটি উপায়ের চেয়ে কম কিছু নেই।
পদ্ধতি # 1: বাধা।
এটি উপরে ব্যাখ্যা করা হয়েছে। আপনি বিঘ্নিত বর্ণনাকারী টেবিল / বিঘ্নিত ভেক্টরটিতে একটি এন্ট্রি সেটআপ করেন এবং তারপরে কার্নেল প্রবেশের জন্য একটি সফ্টওয়্যার ইন্টারপেট কার্যকর করে।
এই পদ্ধতির প্রধান সুবিধাটি হ'ল একটি সাধারণ কার্নেলটি যে কোনওভাবেই বাধা হ্যান্ডেল করতে সক্ষম হওয়া প্রয়োজন, এবং এটি প্রত্নতাত্ত্বিক হার্ডওয়্যারে কাজ করে।
পদ্ধতি # 2: কল গেটস।
একটি কল গেট একটি বিশেষ ধরণের বিভাগ নির্বাচনকারী। কলটির লক্ষ্যটি বিশ্বব্যাপী বা স্থানীয় বিভাগের বর্ণনাকারী টেবিল (যথাক্রমে জিডিটি এবং এলডিটি) লোড করা প্রয়োজন। তারপরে যদি আপনি কলটি গেটটি সেগমেন্ট হিসাবে (কল অফসেট উপেক্ষা করা হয়) হিসাবে ব্যবহার করে একটি দীর্ঘ কল নির্দেশনা সম্পাদন করেন, এটি আপনাকে আরও সুবিধামুক্ত কোডটি কল করতে দেয়। কল গেটগুলি অত্যন্ত নমনীয়; আইএ -32 আর্কিটেকচারটিতে চারটি সুবিধার স্তর রয়েছে এবং কল গেটগুলি আপনাকে যে কোনও স্তরে কল করতে দেয়।
আমি বিশ্বাস করি না যে লিনাক্স কখনও কল কল ব্যবহার করেছিল, তবে উইন্ডোজ 95 করেছে। Win95 কার্নেল পরিষেবাদি ( krnl386.exe
এবং kernel.dll
) আসলে ব্যবহারকারীর মোডে ছুটেছিল (রিং 3)। সর্বোচ্চ সুবিধা স্তর (রিং 0) কেবলমাত্র ড্রাইভার এবং একটি মাইক্রোকার্নের জন্য ব্যবহৃত হত যা কেবলমাত্র প্রক্রিয়া পরিবর্তন করতে পারে। কল গেট ব্যবহার করে ড্রাইভারগুলিতে কল করা হত। এটি লেগ্যাসি 16-বিট কোড (যার মধ্যে অনেক কিছুই ছিল!) Win95 ড্রাইভারকে কেবল একটি স্ট্যান্ডার্ড দূরবর্তী কল ব্যবহার করার অনুমতি দেয়, যেমন তারা সবসময় করেছিল।
বৈশ্বিক বর্ণনাকারী টেবিলের অপর্যাপ্ত সুরক্ষা ছিল বেশ কয়েকটি উইন্ডোজ 95 শোষণের কারণ, যা মেমরির মাধ্যমে লিখে তাদের নিজস্ব কল গেট ইনস্টল করতে সক্ষম হয়েছিল।
পদ্ধতি # 3: SYSCALL / SYSRET এবং SYSENTER / SYSEXIT
এগুলি দুটি নির্দেশাবলীর স্বতন্ত্রভাবে এএমডি এবং ইনটেল দ্বারা উদ্ভাবিত, তবে তারা মূলত একই জিনিসটি করে। SYSCALL / SYSRET প্রথমে এসেছিল এবং এটি কেবলমাত্র AMD ছিল, SYSENTER / SYSEXIT ছিল Intel, তবে AMD এটি এখন প্রয়োগ করে। সুতরাং আমি SYSENTER / SYSEXIT বর্ণনা করতে যাচ্ছি।
কল গেটগুলির বিপরীতে, SYSENTER কেবল 0 রিংয়ে স্থানান্তর করতে ব্যবহৃত হতে পারে এবং কেবলমাত্র একটি জায়গায় স্থানান্তর করতে পারে। তবে, এটি অত্যন্ত স্বল্প-বিলম্বিত হওয়ার সুবিধা রয়েছে কারণ কোনও কলের বিপরীতে বা বিঘ্নিত হয়ে এটি স্ট্যাকটি স্পর্শ করে না।
স্থানান্তর অবস্থানটি তিনটি মডেল-নির্দিষ্ট রেজিস্টার ব্যবহার করে সেট আপ করা হয়: সেগমেন্টের তথ্যের জন্য একটি এবং কার্নেল কোডের নির্দেশ পয়েন্টার এবং স্ট্যাক পয়েন্টারটির জন্য একটি করে। স্ট্যাকের উপরে কিছুই "ধাক্কা" দেওয়া হয়নি, ব্যবহারকারী মোড কোডটি কার্নেলটি যেখানে রিটার্ন নির্দেশিকা নির্দেশক এবং রেজিস্টারে স্ট্যাক পয়েন্টারটি পাস করে ফিরে যেতে হবে তা জানানোর জন্য দায়বদ্ধ। কার্নেল স্ট্যাক পয়েন্টারটি পুনরুদ্ধার করার জন্য দায়ী এবং SYSEXIT নির্দেশ নির্দেশ পয়েন্টারটি পুনরুদ্ধার করে।
SYSENTER এবং SYSEXIT নির্দেশাবলী সম্পর্কে আরও তথ্য।