উত্তর:
এটি কিছুটা জটিল এবং এমনকি জটিল প্রশ্ন, এই অর্থে যে আপনি এটির সাথে বেশ গভীরভাবে যেতে পারেন। তবে বিষয়গুলিকে কিছুটা সরল করতে:
" খনিগুলির খেলায় টাইমার পড়া " এর উদাহরণ বিবেচনা করে :
প্রথম পদক্ষেপটি মেমরির ঠিকানা খুঁজে পাওয়া । এটি সাধারণত মেমোরি এডিটর নামে একটি সরঞ্জামের সাহায্যে করা হয় (একটি ডিবাগারও কিছু ক্ষেত্রে কিছু করতে পারে) যা প্রক্রিয়া স্মৃতিতে একটি ভেরিয়েবলের অবস্থান সন্ধান করতে বিভিন্ন পদ্ধতি ব্যবহার করতে পারে । সাধারণ উপায় হ'ল টার্গেট প্রক্রিয়াটির মেমরি স্পেসের একটি নির্দিষ্ট মান (উদাহরণস্বরূপ টাইমারের মান) সন্ধান করা, তারপরে লক্ষ্য মানটি পরিবর্তন করুন (যেমন টাইমারটি অগ্রিম করুন) এবং আবার ম্যাচের সন্ধান করুন। এই প্রক্রিয়াটি প্রতি পুনরাবৃত্তিকে প্রার্থীদের পিন করে দেয় যতক্ষণ না কেবল সঠিক ভেরিয়েবলটি বাকী থাকে। প্রক্রিয়াটির মেমোরি স্পেসের মধ্যে সেই পরিবর্তনশীলটির ঠিকানা নেওয়া কোনও মেমরি সম্পাদক সহ মাউস ক্লিকের বিষয়।
দ্বিতীয় পদক্ষেপটি সেই নির্দিষ্ট ঠিকানায় ডেটা পরিবর্তন করা । এটি কীভাবে করা হয় তা অপারেটিং সিস্টেমের উপর নির্ভর করে। সঙ্গে উইন্ডোজ , একটি WinAPI কল নামে এর WriteProcessMemory
যা লক্ষ্যবস্তু প্রক্রিয়া 'মেমরি স্পেস মধ্যে একটি প্রদত্ত ঠিকানায় লিখুন প্রাক সংজ্ঞায়িত ডেটাতে ব্যবহার করা যাবে। আমাদের উদাহরণস্বরূপ, আপনি আপনার নিজের পছন্দসই মানের সাথে টার্গেট প্রক্রিয়ায় টাইমার ভেরিয়েবলটি ওভাররাইট করতে এই গেমটি ব্যবহার করবেন, গেমের কার্যকরভাবে টাইমার পরিবর্তন করে।
অনুশীলনে আপনাকে লক্ষ্য প্রক্রিয়াটির প্রক্রিয়া আইডিটি খুঁজে পেতে হবে এবং এর পরে আপনার দুর্বৃত্ত প্রক্রিয়াটি তার মেমরির স্থান পরিবর্তন করার ক্ষমতা অর্জন করতে লক্ষ্য প্রক্রিয়ার সাথে সংযুক্ত করবে। এটি বেশ তুচ্ছ কাজ, তবে প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে অবদান রাখে না তাই আমি এটিকে পাঠকের অনুশীলন হিসাবে ছেড়ে দিয়েছি। ;)
এটি ওএস দ্বারা সম্পূর্ণ আলাদা। কিছু আপনাকে এটিকে একেবারেই অনুমতি দেবে না এবং আপনি যে ডেটা চান তা লক্ষ্যের মেমরির জায়গাতে কোথায় রয়েছে তা জানার আপনার কিছু উপায় থাকতে হবে।
এটি লিনাক্সে কীভাবে করবেন তা এখানে রয়েছে: /unix/6301/how-do-i-read-from-proc-pid-mem-und-linux
ওএস দ্বারা একটি অ্যাপ্লিকেশনকে অনেকগুলি মেমরি দেওয়া হয়। সাধারণত, অ্যাপ্লিকেশনটিতে মেমরিটির জন্য অনুরোধ করতে হয় তবে ভাষাটির কারণে প্রোগ্রামিংটির কাছে সেই কার্যকারিতাটি অস্পষ্ট হতে পারে।
যেহেতু C- এর মতো অন্যান্য ভাষায় ++ সি #, এবং জাভা মত কীওয়ার্ড ব্যবহারের মাধ্যমে অনুরোধ জন্য অনুমতি C- এর মতো ভাষাসমূহ, নির্দিষ্ট মাপ জন্য ব্লক অনুরোধ জন্য অনুমতি new
। প্রতিটি ভাষার মেমরি বরাদ্দ করার বিভিন্ন উপায় রয়েছে, সুতরাং এটি কেবল একটি সংক্ষিপ্ত বিবরণ। মেমরিটিকে ওএস-এ ফিরিয়ে দেওয়া হয় স্পষ্টভাবে বা কোনও আবর্জনা সংগ্রহকারীর মাধ্যমে করা যেতে পারে।
অ্যাপ্লিকেশনটির মধ্যে মেমরির অ্যাক্সেস এটি কীভাবে বরাদ্দ করা হয়েছিল তার উপর নির্ভর করে। মেমরিটি কোথায় অবস্থিত তা চিহ্নিত / ট্র্যাক করার জন্য পয়েন্টারগুলির ধারণাটি ব্যবহার করার জন্য সি এবং সি ++ সর্বাধিক পরিচিত। অন্যথায়, তৈরি করা ক্লাস বা ভেরিয়েবলের মাধ্যমে মেমরি অ্যাক্সেস পরিচালনা করা হয়।
বেশিরভাগ সময়, আপনার প্রোগ্রামের মধ্যে আপনাকে নির্দিষ্ট মেমরির অ্যাক্সেস সম্পর্কে চিন্তা করতে হবে না। ভাষাটি তৈরি করে এবং ওএস কার্যকরভাবে আপনার জন্য সেই উদ্বেগকে অস্পষ্ট করে।
কোনও গেমের টাইমার আপনার উদাহরণ হ'ল অন্তর্নিহিত মেমরির বরাদ্দ সম্পর্কে আপনাকে উদ্বিগ্ন হওয়ার দরকার নেই এর দুর্দান্ত উদাহরণ। আপনার টাইমার উপস্থাপন করে একটি ভেরিয়েবল থাকবে এবং আপনি কেবল ভেরিয়েবলটি থেকে পড়বেন।
আমার উত্তর আপনি যখন অ্যাপ্লিকেশনটি লিখছেন তার জন্য প্রাসঙ্গিক, অন্যদিকে zxcdw- র উত্তরটি অন্য অ্যাপ্লিকেশনের সাথে সম্পর্কিত মেমোরি অ্যাক্সেসের জন্য প্রাসঙ্গিক। আপনার এলএমজিটিএফওয়াই শর্তাবলী "ডিবাগিং" এবং "রিভার্স-ইঞ্জিনিয়ারিং" হবে সেই বিষয়ে আরও তদন্ত করতে।
কিছু অতিরিক্ত পড়া: