الدرس 13: مساحة العناوين الافتراضية
كل عملية في Linux ترى مساحة العناوين الافتراضية الخاصة بها — وهم الذاكرة الخاصة. يشرح هذا الدرس تخطيط VAS (text/data/heap/stack/mmap)، ويوضح كيفية قراءة /proc/self/maps، ويشرح لماذا تُعدّ ASLR مهمة للأمان.
مساحة العناوين الافتراضية أشبه ببيت من الأرقام: كل عملية تظنّ أن لديها بيتًا ضخمًا لنفسها وحدها، لكن نظام التشغيل يترجم تلك الأرقام إلى عناوين فيزيائية حقيقية.
- مساحة العناوين الافتراضية (VAS)
- مساحة العناوين الخاصة التي تحصل عليها كل عملية. تُترجَم العناوين الافتراضية إلى عناوين فيزيائية بواسطة MMU.
- stack (المكدّس)
- منطقة ذاكرة تنمو نزولًا (نحو العناوين الأدنى). تحتوي على المتغيرات المحلية وعناوين العودة وإطارات الدوال. محدودة الحجم.
- heap (الكومة)
- منطقة ذاكرة ديناميكية تنمو صعودًا. تُدار بواسطة malloc/new. تتطلب تحريرًا صريحًا أو garbage collection.
- منطقة mmap
- منطقة يُنشئها استدعاء النظام mmap() — تحتوي على المكتبات المشتركة (.so) والملفات المُعيَّنة في الذاكرة والتعيينات المجهولة (anonymous mappings).
- ASLR
- Address Space Layout Randomisation — يقوم نظام التشغيل بعشوَنة عناوين تحميل stack/heap/mmap في كل تشغيل لجعل استغلال الثغرات أصعب.