ওএস কীভাবে মেমরি অ্যাক্সেস লঙ্ঘন সনাক্ত করে


12

কোনও অপারেটিং সিস্টেম (অগ্রাধিকারযুক্ত লিনাক্স) কীভাবে জানতে পারে যে আপনি মেমরির অবস্থানটি অ্যাক্সেস করেছেন যা আপনি অনুমোদিত নন?

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

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

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

সুতরাং হ্যাঁ, যাইহোক, আমি কিছুটা চালিয়ে যাচ্ছি: কীভাবে কোনও ওএস মেমরির লঙ্ঘন সনাক্ত করে?

ধন্যবাদ

উত্তর:


11

(নিম্নলিখিত উত্তরটি একটি "আধুনিক" ডেস্কটপ, সার্ভার, বা উপরের প্রান্তের এমবেডেড প্ল্যাটফর্ম (যেমন স্মার্টফোন এবং আরও বেশি ছোট সিস্টেমেও ধরে নেওয়া হয়েছে) ধরে নিয়েছে x "আধুনিক" ওএস, যেমন প্রায় কোনও ইউনিক্স, বা 95 এর পরে উইন্ডোজ)

এটি ওএসে ঘটছে না, এটি প্রসেসরে ঘটছে, বিশেষত এমএমইউতে ( মেমরি ম্যানেজমেন্ট ইউনিট ) । এমএমইউ ভার্চুয়াল অ্যাড্রেসিং সমর্থন করে, যার মাধ্যমে পয়েন্টার তৈরি করা বিটগুলি মেমরিতে বিটের শারীরিক অবস্থানটি সরাসরি নির্দেশ করে না।

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

যদি টিএলবিতে এই নির্দিষ্ট ভার্চুয়াল পৃষ্ঠা নম্বরটির জন্য কোনও এন্ট্রি না থাকে, এমএমইউ প্রসেসরকে অবহিত করে যে একটি অবৈধ অ্যাক্সেস ঘটেছে; একে সাধারণত ব্যতিক্রম বলা হয়।

মনে রাখবেন যে আমি এখনও পর্যন্ত ওএসের উল্লেখ করিনি। কারণ এই সমস্ত অপারেশন ওএস থেকে স্বতন্ত্র। ওএসটি খেলতে আসে কারণ এটি দুটি উপায়ে জিনিসগুলি কনফিগার করে:

  • ওএস স্যুইচিংয়ের জন্য দায়বদ্ধ। এটি যখন এটি করে, যেমন আপনি সন্দেহ করেছেন, এটি বর্তমান টিএলবি সংরক্ষণ করে এবং পরবর্তী নির্ধারিত কাজের জন্য সংরক্ষিত টিএলবি দ্বারা এটি প্রতিস্থাপন করে। এইভাবে, প্রতিটি প্রক্রিয়াতে একটি টিএলবি রয়েছে, সুতরাং 0x123456এক্স প্রসেসের ঠিকানাটি রামের একই প্রকৃত জায়গার দিকে ইঙ্গিত করতে পারে না প্রক্রিয়া ওয়াইতে একই ঠিকানার মতো, বা কেবল অবৈধ। যদি কোনও প্রক্রিয়া তার ঠিকানা জায়গার বাইরে কোনও পয়েন্টারকে অবলম্বন করার চেষ্টা করে তবে এটি অন্য প্রক্রিয়ার স্পেসে পৌঁছায় না , বরং এটি কোথাও পৌঁছায় ।

  • কোনও ব্যতিক্রম উত্থাপিত হলে ওএস কী হবে তা সিদ্ধান্ত নেয়। এটি একটি অবৈধ মেমরি অ্যাক্সেস (বিভাগকরণ ত্রুটি, সাধারণ সুরক্ষা ত্রুটি, ...) করার প্রক্রিয়াটি শেষ করতে পারে। এটি যেভাবে অদলবদল বাস্তবায়ন করা হয় সেগুলিও: ব্যতিক্রম হ্যান্ডলারটি অদলবদল স্থান থেকে কিছু তথ্য আনার সিদ্ধান্ত নিতে পারে, সেই অনুযায়ী টিএলবি আপডেট করে আবার অ্যাক্সেস সম্পাদন করে।

নোট করুন যে এমএমইউ সুরক্ষা প্রদান করে কারণ প্রক্রিয়াটি নিজস্ব টিএলবি পরিবর্তন করতে পারে না। কেবল ওএস কার্নেল টিএলবি পরিবর্তন করতে পারে। টিএলবি কীভাবে অনুমতির কাজ করে তা এই উত্তরের বাইরে নয়।


6

1) Segfaults মেমরি পরিচালনা ইউনিট দ্বারা সনাক্ত করা হয়। আপনি যখন মেমরি জিজ্ঞাসা করেন, ওএস মেমরি ম্যানেজমেন্ট ইউনিটকে হার্ডওয়্যার থেকে কিছু পেতে বলে। এমন কিছু আছে যা ওএস আপনাকে দেয় সমস্ত বড় মেমরির ব্লককে ট্র্যাক করে। ওএস ধরণের হাতগুলি এমএমইউতে চলে যায়। যেহেতু এটি আপনাকে প্রদত্ত সমস্ত মেমরি জানে তাই এটি যখন আপনি বরাদ্দ থেকে কোনও মেমরির অবস্থানটি অ্যাক্সেস করার চেষ্টা করেন তখন এটি আপনাকে বলতেও পারে, ওএসের বিশেষত এর জন্য একটি ইভেন্ট রয়েছে, আপনার নিজের স্মৃতি নয়। অবশেষে ওএস আপনার অ্যাপ্লিকেশনটিকে মেরে ফেলবে, সেগফ্র্ট বা অন্য ওএসের সমতুল্য হয় ing

সমস্ত ওএস-এর এই সুরক্ষা নেই। এমএমইউ এটি সমর্থন করলেও 9 অবধি ম্যাকোসগুলির এগুলির কোনও কিছুই ছিল না। উভয়ই জিতেনি 3..১। উইন 95 এর কিছু সুরক্ষা ছিল, কারণ এটি কোনও সুরক্ষা না পেয়ে এবং পরে কিছু যুক্ত করার মধ্যে রূপান্তরিত হয়েছিল।

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

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

আপনি 'প্রোটেকশন না' থেকে আরও কঠোর হওয়ার চেষ্টা করতে পারেন, বৈদ্যুতিক বেড়া নামে একটি সরঞ্জাম রয়েছে ( http://perens.com/FreeSoftware/ElectricFence/ ) যা আপনার এমএমইউকে আরও কিছুটা বেশি কাজ করতে প্ররোচিত করবে এবং এটি আরও সনাক্ত করতে পারে ফল্ট।


ঠিক আছে, আপনি কীভাবে এটি কাজ করে তার বিষয়ে আরও নির্দিষ্ট করে বলতে পারেন? যেমন, এটি কীভাবে জানতে পারে যে একটি নির্দিষ্ট প্রক্রিয়া কোনও নির্দিষ্ট স্থানে অ্যাক্সেস করতে পারে না? এটি কী বলে যে কোন প্রক্রিয়াগুলি অ্যাক্সেস করতে পারে? কিভাবে এটি পার্থক্য করে? ধন্যবাদ
ডডি 21

1
@ প্যানিক - উইকিপিডিয়ায় মেমোরি_ম্যানেজমেন্ট_ ইউনিট এবং সেই পৃষ্ঠা থেকে লিঙ্কগুলি সন্ধান করুন। নোট করুন যে প্রক্রিয়া রাষ্ট্রের মধ্যে এমএমইউ স্থিতি রয়েছে। আপনি এমএমইউ ডিজাইন, বৈশিষ্ট্য এবং সংহতকরণে সেমিস্টার ব্যয় করতে পারেন।
এমপিএজ0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.