یک Object معمولا اول به یک جدول اشاره میکنه و اون جدول شامل آدرس توابع هست:
Object
│
▼
vptr
│
▼
Vtable
│
├── Function A
├── Function B
└── Function C
بنابراین Vtable یک سطح ساختارمند تر برای مدیریت توابع Virtual فراهم میکنه
Vtable
دقیقاً یک استاندارد رسمی ++C هست؟
یک نکته ی مهم:
خود مفهوم Vtable به شکل دقیق در استاندارد C++ تعریف نشده
Vtable
در واقع یک روش رایج برای پیاده سازی Polymorphism توسط کامپایلر هاست
یعنی ممکنه جزئیات پیادهسازی بین:
GCC
Clang
MSVC
متفاوت باشه
اما ایدهی کلی یعنی استفاده از اطلاعاتی برای پیدا کردن تابع درست در زمان اجرا در عمل بسیار رایجه
برای همین هنگام Reverse باید همیشه به ABI و کامپایلری که برنامه با اون ساخته شده توجه کنیم
Vtable
معمولا جدولی شامل آدرس Virtual Function های یک کلاس در ++C هست Object هایی که از Virtual Function استفاده میکنن اغلب یک Pointer داخلی مثل vptr دارن که اونها رو به Vtable مربوط میکنه موقع اجرای یک Virtual Function برنامه از این ساختار برای پیدا کردن تابع مناسب استفاده میکنه
شناخت Vtable هم در Reverse کردن برنامه های ++C مهمه و هم برای درک اینکه Object ها در حافظه چجوری سازماندهی میشن
@reverseengine
Post #1704
48
- ❤ 2