OS Internals – Telegram
OS Internals
3.65K subscribers
6 photos
29 videos
12 files
91 links
مقاله و فیلم آموزش مدیریت و برنامه‌نویسی سیستم‌های عامل، شبکه و امنیت اطلاعات.

مقالات من در ویرگول:
https://virgool.io/@akazemi

ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55

ارتباط با مدیر کانال از طریق:
@akazemi67
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
ℹ️ شرح ساختار و چرایی دوره‌ی‌ Windows Internals and Memory Analysis

این ویدئوی کوتاه ۲ دقیقه‌ای ساختار دوره و جایگاه آن در نقشه‌ی راه امنیت را نشان می‌دهد.
👍85👏2
OS Internals
✅️ برگزاری دوره‌ی Windows Internals and Memory Analysis 💎 با محوریت امنیت ( تیم‌های آبی و قرمز، تحلیل حافظه، تحلیل باینری، تحلیل بدافزار ) 💠اطلاعات دوره: 🔹برگزاری به صورت آفلاین/آنلاین 🔸بیش از ۳۰ ساعت ویدئو و ۵ جلسه‌ی آنلاین رفع اشکال و تدریس 🔹مبلغ شهریه:‌…
📴 ‼️ تخفیف برای دوره 📴 ‼️ تخفیف برای دوره

🗓️ مهلت ثبت‌نام ۲۰ مهر ۲۵ مهر
شروع دوره ۲۶ مهر

⚠️ برگزاری به صورت آفلاین

دوره‌ی Windows Internals and Memory Analysis

سرفصل کلی دوره:
Chapter 01 – Windows Architecture
Chapter 02 – WinDbg Basics and Windows Syscalls
Chapter 03 – Important Windows Processes
Chapter 04 – Function Calling Conventions
Chapter 05 – Process and Thread Internals
Chapter 06 – Memory Management
Chapter 07 – Driver Development
Chapter 08 – PE Details
Chapter 09 – GlobalFlags, Exceptions and Registry
Chapter 10 – Memory Forensics
Chapter 11 – Hunting Malware

💲قیمت دوره: ۳میلیون تومان

💠 ثبت نام و کسب اطلاعات بیشتر:
@akazemi67
14👍2
معرفی مدل برنامه‌نویسی COM در ویندوز

برنامه‌نویسی COM (Component Object Model) در ویندوز یک رویکرد توسعه نرم‌افزار است که ایجاد مؤلفه‌های نرم‌افزاری قابل استفاده مجدد و تعاملی را ممکن می‌سازد. مؤلفه‌های COM اشیایی هستند که می‌توانند به وسیله زبان‌های برنامه‌نویسی مختلف نوشته شده و با یکدیگر در پروسه‌های مختلف و حتی در ماشین‌های مختلف ارتباط برقرار کنند.

توسعه‌دهندگان از COM برای ساخت برنامه‌های ویندوز ماژولار و قابل توسعه استفاده می‌کنند. استفاده از COM شامل بهره‌گیری از ویژگی‌هایی مانند برنامه‌نویسی مبتنی بر Interface، شمارش Reference برای مدیریت حافظه و یک روش استاندارد برای دسترسی و فراخوانی متدها است. اشیا COM یک فناوری اساسی برای ساخت انواع مختلفی از برنامه‌های ویندوز از جمله کنترل‌های ActiveXو افزونه‌های Office و خدمات مختلف سیستمی است.

در این ویدئو که بخشی از یکی از کلاس‌هایم است به شرح مختصری از COM پرداخته و یک نمونه از فراخوانی اشیای آن به کمک Poweshell را نمایش می‌دهیم.
لینک ویدئو در یوتیوب:
https://youtu.be/a3itECMWWpk
لینک ویدئو در آپارات:
https://aparat.com/v/3bs8O

#ShortWinInternals #windows #internals #COM #ComponentObjectModel #Powershell #CLSID
8👍4
OS Internals pinned «📴 ‼️ تخفیف برای دوره 📴 ‼️ تخفیف برای دوره 🗓️ مهلت ثبت‌نام ۲۰ مهر ۲۵ مهر شروع دوره ۲۶ مهر ⚠️ برگزاری به صورت آفلاین دوره‌ی Windows Internals and Memory Analysis سرفصل کلی دوره: Chapter 01 – Windows Architecture Chapter 02 – WinDbg Basics and Windows…»
OS Internals pinned «📴 ‼️ تخفیف برای دوره 📴 ‼️ تخفیف برای دوره 🗓️ مهلت ثبت‌نام ۲۰ مهر ۲۵ مهر شروع دوره ۲۶ مهر ⚠️ برگزاری به صورت آفلاین دوره‌ی Windows Internals and Memory Analysis سرفصل کلی دوره: Chapter 01 – Windows Architecture Chapter 02 – WinDbg Basics and Windows…»
بررسی قرارداد فراخوانی توابع در برنامه‌های ۳۲بیتی

در این ویدئو که بخشی از یکی از کلاس‌هایم است، در مورد قراردادهای مختلف فراخوانی توابع در برنامه‌های ۳۲بیتی صحبت کرده و در یک برنامه‌ی ساده شیوه‌ی انجام آن‌ها را نمایش می‌دهم.
این فراخوانی‌ها عبارتند از: STDCALL، CDECL و FASTCALL

مدل STDCALL از stack برای انتقال پارامترهای تابع استفاده کرده و در آن تابعی که فراخوانی شده است(Callee) پس از اتمام، پارامترها را از روی stack حذف می‌کند. این مدل در اکثر توابع WinAPI‌ مورد استفاده قرار می‌گیرد.

مدل CDECL مشابه STDCALL‌ است ولی در آن تابعی که فراخوانی را انجام می‌دهد(Caller) پاک‌سازی stack را بر عهده دارد. این مدل در توابع C/C++ پیش‌فرض بوده و در لینوکس نیز از آن استفاده می‌شود.

مدل FASTCALL همانطور که از نامش پیداست، با استفاده از رجیسترها برای انتقال آرگومان‌های تابع «البته فقط دو پارامتر اول با رجیستر ارسال شده و مابقی از طریق stack‌ارسال می‌شوند» سعی در سرعت بخشیدن به اجرا دارد. پاکسازی stack در صورت نیاز، مشابه STDCALL توسط تابع فراخوانی شده(Callee) انجام می‌شود.

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

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

#ShortWinInternals #windows #internals #CallingConventions #x86 #stdcall #cdecl #fastcall #programming #cpp
11👍1
اجرای تابع به کمک اندیس منفی در آرایه‌های زبان سی در لینوکس

بازه‌ی معتبر اندیس‌ آرایه‌ها در اکثر زبان‌های برنامه‌نویسی چک شده و با ارسال اندیس نامتعبر استثنایی تولید شده و از تغییر حافظه جلوگیری می‌شود. (مثلArrayIndexOutOfBoundException در جاوا یا IndexError‌ در پایتون)

این موضوع در زبان‌های C/Cpp صادق نبوده و دست برنامه‌نویس برای اینکه گلوله‌ای در پای خودش شلیک کند بازبوده و برای آرایه‌ها می‌توان اندیس‌های منفی یا مثبت بیشتر از مرز آرایه ارسال کرده و به بخش‌های دیگر حافظه دسترسی پیدا کرد. (از این موضوع می‌توان به کمک AddressSanitizer و با تحمل کمی افت Performance جلوگیری کرد)

اهمیت این موضوع این است که اگر آرایه بر روی Heap تعریف شده باشد امکان دستکاری Heap-Metadata (و یا داده‌ی مربوط به شی دیگر) وجود داشته و اگر آرایه بر روی Stack تعریف شده باشد به دلیل ذخیره‌ی ReturnAdress بر روی Stack امکان دستکاری آن و اجرای کد وجود دارد.

در این ویدئو که بخشی از یکی از کلاس‌هایم است این موارد توضیح داده شده و در یک مثال ساده PoCای از تغییر آدرس بازگشت تابع با ارسال اندیس منفی برای آرایه و اجرای تابعی دلخواه و سپس تاثیر فعال کردن AddressSanitizer نمایش داده می‌شود.

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

#ShortLinuxInternals #linux #internals #gdb #x86 #exploitation #gcc #AddressSanitizer
15👍8
مروری بر روی ساختار فایل‌های PE‌ ویندوز

فایل‌های (PE) Portable Executable فرمت استاندارد اجرایی در سیستم‌عامل ویندوز هستند. این فایل‌ها نقش اساسی در اجرای برنامه‌ها و اپلیکیشن‌ها در پلتفرم ویندوز ایفا کرده و در فایل‌های اجرایی، Obejct Files، فایل‌های DLL، فایل‌های sys درایورها و حتی در فایل‌های EFI مورد استفاده قرار می‌گیرند.

در حالت کلی این فایل‌ها شامل یکسری Header‌ و یکسری بخش هستند که هدرها حاوی Meta-Data‌ و بخش‌ها حاوی خود داده هستند.
اطلاعاتی که در هدرها هستند برای مشخص کردن معماری که فایل بر روی آن قابل اجرا بوده، تعداد بخش‌های موجود در فایل، نوع بخش، آدرس بخش بر روی فایل و درون حافظه، جنس داده‌، مجوزهای دسترسی به داده و موارد مختلف دیگر است.

از دیگر مواردی که در فایل‌های PE ‌مشخص می‌شود توابعی هستند که برنامه به آن‌ها نیاز داشته و از طریق DLLها و با انجام شدن Dynamic Linking به آن‌ها دسترسی پیدا می‌کنند. در صورتیکه فایل PE بجای فایل exe یک فایل DLL باشد توابعی که Export ‌کرده و برنامه‌ها با استفاده از DLL به آن‌ها دسترسی خواهند داشت نیز در این ساختار مشخص می‌شوند.

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

لینک ویدئو در یوتیوب:
https://youtu.be/Ueu-5XEDwqA
لینک ویدئو در آپارات:
https://www.aparat.com/v/Y5c7n

#ShortWinInternals #windows #internals #PE #PortableExecutable #101HexEditor
👍172
Windows Internals and Memory Analysis - SLIDES.pdf
6.7 MB
📚 انتشار اسلایدهای دوره Windows Internals and Memory Analysis

‼️ از هفته‌ی آخر مهرماه دوره شروع شده و هر چهارشنبه یک فصل برای شرکت‌کنندگان ارسال میشه و تا الان مباحث مختلفی از درک ساختار ویندوز و کار با WinDbg تا جزئیات پروسه و نخ، مدیریت حافظه و نوشتن درایور ارسال شده و این هفته هم نوبت به جزئیات فایل‌های PE رسید.

🎯 تصمیم گرفتم اسلایدهای دوره که برای آماده کردن آن‌ها از اسلایدهای دوره‌هایی که خریده بودم تا مقاله‌های مختلف و بعضا درک خودم استفاده کرده بودم را به صورت عمومی منتشر کنم که هم بقیه بتونند مفاهیم مختلف رو مرور کنند و هم اگر مدرس هستند در دوره‌های خودشون بهره ببرند.

ℹ️ یک عادتی که من دارم اینه که اگر از عکس یا مطلبی در اسلاید کلاس‌هام استفاده می‌کنم لینک مقاله رو هم به عنوان Source پایین صفحه می‌گذارم که بقیه بتونند برای عمیق شدن در موضوع به مطالعه‌ی مقاله بپردازند و حق کپی‌رایت هم رعایت بشه، حتما مقاله‌ها رو هم چک کنید.

📌 امیدوارم براتون مفید باشه و بهره ببرید 📌
34👍12
Linux Internals and Forensics.pdf
14.9 MB
📚 انتشار اسلایدهای دوره Linux Internals and Forensics

‼️ اخیرا دوره‌ای در زمینه‌ی Internal لینوکس و استفاده از آن برای Forensics داشتم و تصمیم گرفتم اسلایدهای دوره و بخش‌هایی از آن را که به توضیح طرز کار قسمتی از لینوکس می‌باشد، به صورت ویدئوهای کوتاه منتشر کنم.

ℹ️ این دوره موارد کلی زیر را پوشش داده و برای اطلاع از جزئیات مطالب می‌توانید به مرور اسلایدها بپردازید. همچنین در تمامی بخش‌ها لینک‌هایی برای ارجاع به مقالات و کسب اطلاعات بیشتر وجود دارد که می‌توانید از ‌آن‌ها برای مطالعه‌ی بیشتر استفاده کنید.
* Programming Review
* Building and Debugging Linux Kernel
* System Calls Internals
* Writing Kernel Modules
* Process and Thread Internals
* Ftrace and Hooking Kernel Functions
* IPC Mechanisms
* Linux Memory Forensics
* ELF Structure
* MBR and GPT Overview
* VFS Internals
* EXT4 File System Internals
* Disk Forensics
* Linux Malware Techniques

📌برای دسترسی به نمونه کدهای استفاده شده در دوره از مخزن زیر استفاده کنید:
https://github.com/akazemi67/Teaching/tree/main/Linux%20Internals%20Course
23👏4👍1
شیوه‌ي دریافت اطلاعات فایل‌ها از سیستم‌عامل توسط دستور ls

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

برای ارتباط با سطح کرنل از UserMode از System Call استفاده می‌شود که API درخواست از سیستم‌عامل بوده و امکان اجرای درخواستی از طریق آنرا فراهم می‌کنند. حتی اجرای یک دستور بسیار ساده مثل echo hi نیز باید از SystemCallها کمک گرفته و از طریق آن‌ها متنی را در FileDenoscriptor شماره‌ی ۱ که همان StandardOutput می‌باشد بنویسد.

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

لینک ویدئو در یوتیوب:
https://youtu.be/118PLXAheJ8
لینک ویدئو در آپارات:
https://www.aparat.com/v/8k9zh

#ShortLinuxInternals #linux #internals #syscalls #systemcalls #ls #commands
19👍1
بررسی شیوه‌ی نگهداری اطلاعات پروسه‌ها در کرنل ویندوز

از دید کرنل ویندوز، هر پروسه دارای یک شی از ساختار EPROCESS بوده و اطلاعات پروسه‌ها در یک لیست پیوندی حلقوی دو طرفه نگهداری می‌شود. متغیر سراسری PsActiveProcessHead اشاره‌گری به اولین و آخرین پروسه داشته «به خاطر دوطرفه بودن لیست پیوندی دارای دو اشاره‌گر Flink/Blink می‌باشد» و به کمک آن می‌توان لیست را پیمایش کرد.

برای ایجاد لیست پیوندی، هر شی EPROCESS به کمک آیتمی به اسم ActiveProcessLinks که آن هم دو بخش Flink/Blink دارد پروسه‌ها را به یکدیگر متصل کرده و به Offsetای از ساختار EPROCESS که مربوط به ActiveProcessLinks می‌باشد اشاره می‌کند. در این روند Flink به Offset پروسه‌ی بعدی و Blink به Offset پروسه‌ی قبلی اشاره می‌کند.

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

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

#ShortWinInternals #windows #internals #EPROCESS #WinDbg #ActiveProcessLinks
14👍8👏1
دعوت از جامعه‌ی IT مخصوصا متخصصان و مدرسان حوزه‌ی امنیت و لینوکس برای داوری و بیان مشکلات کارم

امسال تجربه‌ی جالبی در زمینه‌ی تدریس یک دوره‌ با شرکت SITS «زیرساخت امن خدمات تراکنشی بانک ملت» داشتم که سوالات و ابهامات زیادی برایم ایجاد کرد که باعث شد تصمیم بگیرم روند کار، تجربه‌‌ام و حتی ویدئوهای دوره رو اینجا به اشتراک بگذارم و امیدوارم دوستان همراهی کنند و با بررسی مطالب دوره، اشتراک‌گذاری، نظر دادن و ذکر اشکالاتی که می‌بینند به من کمک کنند که هم کارم رو بهبود بدم و هم اینکه مجدد کلاسی نداشته باشم که در نهایت پولم رو دریافت نکنم!

تابستان امسال از طرف SITS با من تماس گرفتند برای یک دوره که Internal و Forensic‌ لینوکس رو تدریس کنم. من یک سرفصلی آماده و ارسال کردم که مورد تایید قرار گرفت و چون قرارداد شخصی نمی‌بستند من با آکادمی هماهنگ کردم و توافق شد که دوره از طرف آکادمی برگزار بشه. مدت زمان دوره ۴۰ ساعت در نظر گرفته شده و قیمت دوره بر اساس ۴۰ساعت بسته شده و پیش‌فاکتور برای SITS‌ ارسال شد. چون قرار بود دو روز در هفته و هر روز ۳ساعت کلاس داشته باشیم من گفتم که ۱۴جلسه‌ی ۳ ساعته و در مجموع ۴۲ساعت کلاس برگزار می‌کنیم و در فاکتور همین مدت زمان قید شد. با واریز ۵۰درصد مبلغ قرارداد، دوره اوایل مهر به صورت آنلاین آغاز شد.

با اینکه من ابتدای هر کلاسی کل کلاس رو مرور می‌کنم و میگم که چه ترتیبی پیش گرفته میشه و چه مطالبی بیان میشه، در ۴جلسه‌ی اول تقریبا هر جلسه یک بحثی در مورد سرفصل داشتیم و من باید توضیح می‌دادم که چه روندی داریم طی می‌کنیم و چرا مطالب به این صورت بیان میشه. مثل این بود که سرفصل و مطالب دوره برای افرادی که در دوره شرکت کرده‌اند مبهمه و نمی‌دونند دوره در چه زمینه‌ایه و چه چیزی رو می‌خواد پوشش بده. این بود که من پس از جلسه‌ی چهارم کلاس رو کنسل کردم و ذکر کردم که بررسی کنید آیا این دوره رو نیاز دارید و آیا سرفصلی که خودتون تایید کرده‌اید درسته یا خیر! از آکادمی با من تماس گرفتند که دوره رو ادامه بدید و مشکل با رابط سازمانی بررسی و حل شده‌ است. این بود که دوره ادامه پیدا کرد ولی تعداد شرکت کنندگان همچنان ثابت نبوده و خیلی متغیر بود!

چند جلسه‌ی دیگر پیش رفت و در یک جلسه من بودم تنهای تنها!!! کسی از SITS آنلاین نشد و پس از پیگیری مشخص شد درگیر جابجایی بوده‌اند و فرصت اطلاع رسانی برای کنسل کردن کلاس نداشته‌اند و من فقط بیکار بودم که از کار زدم و آنلاین شدم و منتظر تدریس! این بود که به پشتیبانی آکادمی اطلاع دادم به خاطر این موضوع باید یک جلسه از کلاس کم کنیم و کلاس بجای ۱۴ جلسه بشه ۱۳ جلسه چون من آنلاین و آماده‌ی تدریس بودم ولی از نظر دوستان وقت من ارزش اطلاع رسانی برای کنسل کردن نداشته! پشتیبان آکادمی هم این موضوع رو به رابط سازمانی اطلاع رسانی کردند.

دوره ادامه داشت تا اواخر دوره هم مجدد این حرکت تکرار شده و ۲ نفر پس از ۱۰ دقیقه که من منتظر بودم حاضر شدند و هرچقدر هم من ازشون تلاش کردم بپرسم که آیا شروع کنیم و بقیه می‌آیند یا خیر پاسخی دریافت نکردم و یک جلسه‌ی دیگر نیز به خاطر دوستان کنسل شد. اینبار هم می‌خواستم یک جلسه‌ی دیگر کسر کنم ولی فقط به پشتیبانی آکادمی اطلاع دادم که کلاس ۱۳ جلسه بیشتر نبوده و علی‌رغم اینکه من مطلب دارم برای بیان کردن در ۱۳ جلسه مطالب دوره جمع شده و کلاس پایان می‌پذیرد. این بود که اواخر آذرماه دوره با برگزاری ۱۳ جلسه به اتمام رسید.

الان حدود ۲ماه از اتمام دوره می‌گذرد و پس از کلی پیگیری توسط دوستان آکادمی «که واقعا از همشون کمال قدردانی و تشکر رو دارم» پیگیری‌های خودم، بیان مفصل روندی که طی شده توسط خودم به صورت voice در گروه دوره که ۳۰ نفر از کارشناسان تا افراد رده‌بالای SITS هم در آن بودند، نه تنها ۵۰درصد مابقی دوره تسویه نشده، حتی پاسخی دریافت نکرده‌ام که اشکال دوره چی بوده و چرا پرداخت انجام نشده. آیا مطالب طبق سرفصل پیش نرفته؟ آیا من بی اخلاقی در برخورد و تدریس داشته‌ام؟ آیا مدت زمان دوره کم بوده؟ خلاصه اینکه من به خطایم آگاه نشدم!

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

https://1drv.ms/f/s!Ai-nCVsaY1b5tzTMfCBo4c6MeIi_?e=eE1rpU

تشکر و سپاس فراوان.
45👍27🤔1
📚 انتشار دوره Windows Internals and Memory Analysis در مکتب‌خونه و یک تخفیف ۵۰درصدی برای ثبت‌نام

🗓️ سال ۹۷ اولین همکاری من با مکتب‌خونه با انتشار دوره‌ای در زمینه‌ی شبکه شکل گرفت که تجربه‌ی خوبی بود.
از آن زمان تا کنون چندبار تلاش شد که مجدد همکاری شکل گرفته و دوره‌ی دیگری از طریق مکتب‌خونه منتشر کنم ولی متاسفانه به دلیل مشغله‌ی کاری و سختی آماده کردن دوره‌ی آفلاین این امر میسر نشد.

ℹ️ امسال دوره‌ی Windows Internals and Memory Analysis را به صورت آفلاین آماده کردم که زحمت زیادی داشته و انرژی زیادی نیز ازم گرفت.

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

می‌تونید دوره رو از طریق لینک زیر مشاهده و ثبت‌نام کنید:
yun.ir/rx6jy2

📴 برای دریافت ۵۰ درصد تخفیف، در زمان خرید کد tahlil-kazemi را وارد کنید.

#WindowsInternals #Course #Training #Maktabkhooneh
35👍2🤔1
سلام خدمت همه‌ی همراهان
🌹 سال نو مبارک 🌹

🪴امیدوارم در 403 به جای خطا خوردن‌ها و ممنوع شدن‌ها، گشایش‌هایی برای همه‌ی شما در راه باشد و به بهترین‌ها برسید.

🎯 برای امسال برنامه‌ی تهیه یکسری آموزش جدید و خاص رو دارم که به مرور اعلام می‌کنم.

🧩 برنامه انتشار ویدئو از InTERnAL ویندور و لینوکس هم مثل قبل ادامه خواهد داشت.

🌺 به امید بهترین‌ها برای همه
47👏4👍1👎1
مروری بر حافظه‌ی مجازی در ویندوز

وقتی یک برنامه اجرا می‌شود، برای آن پروسه‌ای ایجاد شده که امکانات مختلفی از جمله دسترسی به حافظه را فراهم می‌کند. پروسه‌ها مستقیم به حافظه‌ی فیزیکی (همان RAM) دسترسی نداشته و یک لایه‌ی Abstraction توسط سیستم‌عامل ایجاد می‌شود که به آن حافظه‌ی مجازی می‌گویند.

این لایه وظایفی دارد که بخشی از آن به صورت خلاصه عبارتند از:
• مدیریت اینکه داده دقیقا در کدام آدرس RAM قرار دارد و Map کردن آن در فضای مجازی پروسه
• استفاده از Hard Disk در صورت کم بودن RAM بدون اینکه پروسه از آن اطلاع داشته باشد
• جلوگیری از تکرار داده در حافظه‌ی فیزیکی و Map کردن بخشی که بین چند پروسه مشترک است برای آن‌ها
• کنترل دسترسی به اطلاعات خاص و تعیین permission برای داده
• دسترسی به داده‌ها به صورت یکسری Chunk بجای دسترسی بایت به بایت (تعریف Page)

از طرف دیگر از دید پروسه کل فضای آدرس‌دهی ممکن (در مدل ۳۲بیتی ۲گیگابایت و در مدل ۶۴بیتی ۱۲۸ترابایت) قابل تخصیص بوده و می‌توان از آن استفاده نمود ولی اینکه واقعا چقدر از آن قابل استفاده است بسته به میزان RAM موجود و میزان Hardای دارد که برای استفاده به عنوان حافظه در سیستم‌عامل تعیین شده است.

ویندوز امکان رزرو کردن کل فضای آدرس‌دهی ممکن را به پروسه‌ها می‌دهد ولی برای استفاده‌ی واقعی و قراردادن داده در آن باید آن فضا commit شده و در این مرحله است که امکان‌پذیر بودن آن با توجه به میزان کل فضای موجود، توسط سیستم‌عامل چک شده و اگر امکان‌پذیر بود به پروسه امکان دسترسی داده می‌شود.

در ابزارهای مختلفی که در ویندوز وجود دارند (مثل Task Manager, Process Explorer) یکسری Counter برای اطلاع پیدا کردن از وضعیت حافظه در سیستم و میزان فضای رزرو یا استفاده شده توسط پروسه‌ها وجود دارد که می‌توان به کمک آن‌ها از اتفاقاتی که برای حافظه رخ می‌دهد اطلاع پیدا کرد.

در این ویدئو مروری بر وظایف حافظه‌ی مجازی در ویندوز انجام گرفته و Counterهای موجود، برای بررسی آن در ابزارهای مختلف شرح داده می‌شوند.

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

#ShortWinInternals #windows #memory #internals #VirtualMemory #MemoryCounters
12👍6👏1
شیوه‌ی دریافت حافظه توسط برنامه‌ها و درایورها در ویندوز

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

در 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
👍103