TGViewer
OS Internals OS Internals @oxaa55 · 3.64K subscribers
Post #121 3.96K
شیوه‌ی دریافت حافظه توسط برنامه‌ها و درایورها در ویندوز

در پست قبلی در مورد حافظه‌ی مجازی در ویندوز صحبت کردیم و وظایف این لایه و پارامترهایی که در ابزارهای مختلف برای بررسی میزان حافظه‌ی تخصیص داده شده به پروسه‌ها وجود دارند را مرور کردیم. در این پست جزئیات دریافت حافظه از ویندوز توسط برنامه‌ها و درایورها را شرح داده و این فرآیند را در سمت کرنل عمیق‌تر بررسی می‌کنیم.

در user mode چند لایه API برای دریافت حافظه از سیستم‌عامل ویندوز وجود دارد. در پایین‌ترین سطح، APIهای VirtualAlloc وجود دارند که هیچ‌گونه مدیریتی بر روی حافظه‌ی دریافت شده انجام نداده و حافظه را در واحد‌هایی به اندازه‌ی Page (پیش‌فرض 4KB) تخصیص می‌دهند. این APIها امکان reserve/commit کردن حافظه را فراهم کرده و برای کار با حافظه‌های بزرگ مناسب هستند.

لایه‌ی بعدی APIهای حافظه که برای کار با اندازهای کوچک حافظه مثل چندبایت نیز مناسب است Heap می‌باشد. این APIها به صورت داخلی از APIهای لایه‌ی قبلی استفاده کرده و نیازی به تخصیص حافظه در ابعاد Page را ندارند. بر روی این لایه است که زبان‌هایی مثل C/C++ پیاده‌سازی‌های malloc/new و free/delete را انجام می‌دهند (جزئیات پیاده‌سازی وابسته به کامپایلر است) که مربوط به پیاده‌سازی‌های Compilerها می‌باشد. در این لایه دیگر APIهای ویندوز مستقیم توسط برنامه‌نویس استفاده نشده و نیازی به کار با آن‌ها ندارد.

اما در سمت کرنل ماجرا از چه قرار است؟ در سمت کرنل چیزی با عنوان VirtualAlloc/Heap وجود ندارد و به درایورها حافظه از طریق دو نوع Pool اختصاص داده می‌شود. اولین نوع Non-Paged Pool است که حافظه‌ی تخصیص داده شده از آن تضمین می‌شود که همیشه در RAM باشد. این موضوع برای جلوگیری از Deadlock و Crash کردن درایور اهمیت دارد (جزئیات این موضوع بماند برای یک پست و ویدئوی دیگر!) نوع دوم Pool که حافظه‌ی آن ممکن است در RAM نبوده و به دیسک منتقل شود Paged Pool است.

در این ویدئو جزئیات تخصیص حافظه در سمت کرنل و APIهای ExAllocatePool بررسی شده، در یک درایور تخصیص و آزاد شدن حافظه نمایش داده شده و سپس به کمک WinDbg حافظه‌ی تخصیص داده شده به درایور بررسی می‌شود.

لینک ویدئو در یوتیوب:
https://youtu.be/pMPyT13jzwk
لینک ویدئو در آپارات:
https://aparat.com/v/VIvgR

#ShortWinInternals #windows #memory #internals #VirtualMemory #MemoryCounters #kernel #drivers #SystemPools #WinDbg
YouTube System Memory Pools in Windows [PER] در سمت کرنل چیزی با عنوان VirtualAlloc/Heap وجود ندارد و به درایورها حافظه از طریق دو نوع Pool اختصاص داده می‌شود. اولین نوع Non-Paged Pool است که حافظه‌ی تخصیص داده شده از آن تضمین می‌شود که همیشه در RAM باشد. این موضوع برای جلوگیری از Deadlock و Crash کردن…
  • 👍 10
  • ❤ 3
More from @oxaa55
  1. Sep 24, 2026🎯Inside the MBR: How the 512-Byte Boot Sector and Partition Tables Work ⁉️تا حالا به این…
  2. Aug 21, 2026🔸 کارگاه تخصصی «Linux Kernel Internals» اگر با Linux کار می‌کنید، شناختن دستورات و مدیریت…
  3. Aug 14, 2026OS Internals pinned «🚀 دوره‌ی Foundations of Linux Reverse Engineering and Exploitation ب…
  4. Aug 14, 2026🚀 دوره‌ی Foundations of Linux Reverse Engineering and Exploitation به صورت کامل منتشر شد!…
  5. Jun 3, 2026سلام به همه عزیزان، یکی از کارهایی که تجربه خیلی با ارزشی است و یادگیری زیادی داره، کار کر…
  6. Dec 12, 2025📢 انتشار فصل هفتم دوره Linux Exploit Development ℹ️ جزئیات ساختار فایل‌های ELF. مشاهده‌ی…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →