তবে কেন এটি 0x0C
সাধারণ হিসাবে মনে 0x08
হয় (এটি কি সত্য? আমি জানি না; এবং কী ধরণের অ্যাপ্লিকেশনগুলিতে?), এটি ভার্চুয়াল পদ্ধতিতে টেবিল পয়েন্টারগুলির সাথে করতে পারে। এটি সত্যিই একটি মন্তব্য (বুনো গণ অনুমান করা :), তবে এটি কিছুটা বড়, সুতরাং এখানে যায় ... যদি আপনি ভার্চুয়াল পদ্ধতিগুলির সাথে একটি ক্লাস পেয়ে থাকেন তবে তার নিজস্ব ক্ষেত্রগুলি স্থানান্তরিত হতে চলেছে 0x04
। উদাহরণস্বরূপ, অন্য একটি ভার্চুয়াল শ্রেণীর উত্তরাধিকার সূত্রে এমন শ্রেণীর মেমরি বিন্যাস থাকতে পারে:
0x00 - VMT pointer for parent
0x04 - Field 1 in parent
0x08 - VMT pointer for child
0x0C - Field 1 in child
এটি কি সাধারণ দৃশ্য, না কাছাকাছি? আমি নিশ্চিত নই. তবে মনে রাখবেন যে 64৪-বিট অ্যাপ্লিকেশনটিতে এটি আরও আকর্ষণীয়ভাবে 0x0C
মানটির দিকে সরে যেতে পারে:
0x00 - VMT parent
0x08 - Field 1 parent
0x0C - VMT child
0x14 - Field 2 child
সুতরাং আসলে অনেকগুলি ক্ষেত্রেই অ্যাপ্লিকেশনগুলির নাল-পয়েন্টার অফসেটগুলিতে উল্লেখযোগ্য ওভারল্যাপ থাকতে পারে। এটি কোনও শিশু শ্রেণির প্রথম ক্ষেত্র, বা এর ভার্চুয়াল পদ্ধতি সারণী পয়েন্টার হতে পারে - যখনই আপনি কোনও ভার্চুয়াল পদ্ধতি কল করেন যখনই আপনি কোনও পয়েন্টারে ভার্চুয়াল পদ্ধতিটি কল করছেন null
, আপনি তার অ্যাক্সেস লঙ্ঘন পাবেন ভিএমটি অফসেট। এই নির্দিষ্ট মানটির প্রসারটি তখন কিছু সাধারণ এপিআইর সাথে কিছু করতে পারে যা একটি বর্গ সরবরাহ করে যা একই ধরণের উত্তরাধিকারের ধরণ রয়েছে, বা সম্ভবত আরও একটি বিশেষ ইন্টারফেস (কিছু শ্রেণীর অ্যাপ্লিকেশন যেমন ডাইরেক্টএক্স গেমগুলির পক্ষে যথেষ্ট সম্ভব) সরবরাহ করে। এটির মতো সাধারণ কিছু সাধারণ কারণগুলি ট্র্যাক করা সম্ভব হতে পারে তবে আমি এমন অ্যাপ্লিকেশনগুলি থেকে খুব দ্রুত মুক্তি পেতে চাই যা এলোমেলোভাবে হয় so
0000000C
হয় পথ চেয়ে বেশি প্রচলিত00000008
, কিন্তু উত্তর কেউই ঠিকানা বলে মনে হচ্ছে যে এ সব: /