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

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

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

ارتباط با مدیر کانال از طریق:
@akazemi67
Download Telegram
شروع فصل دوم دوره Windows Internals در مورد Debugging
از امروز به صورت هفتگی هر ۴شنبه [[بسته به مشغله کاری ممکنه البته بشه یک چهارشنبه در میان]] در مورد Debugging ویدئوی جدید خواهیم داشت. ویدئوها همزمان بر روی آپارات و یوتیوب منتشر می‌شوند که در ادامه لینک‌ها رو می‌تونید ببینید.

لطفا منتشر کنید که دوستان علاقه‌مند استفاده کنند. اینم لینک کانال تلگرام، عضو بشید که کلیه‌ی مواردی که قبلا منتشر شده و مقاله‌هایی که در آینده قصد انتشار دارم رو داشته باشید:
https://t.me/OxAA55

اما این هفته ۲ ویدئو داریم که معرفی مطالب فصل و روند Compile رو در بر دارند.
1. این اولین ویدئوی فصل دوم دوره‌ی Windows Internals است که در آن به موضوع دیباگ می‌پردازیم. در این ویدئو دلیل افزودن این فصل به دوره و مباحثی که در این فصل پوشش می‌دهیم معرفی می‌شوند.
https://aparat.com/v/0Xm2d
https://youtu.be/pSekiGgplRc

2. در این ویدئو ابتدا با مراحلی که یک فایل source طی کرده تا به فایل باینری تبدیل شود آشنا شده و سپس به ساختار برنامه‌ها بر روی دیسک، و در حالت اجرایی در حافظه می‌پردازیم. تبدیل شدن فایل cpp به فایل پیش‌پردازش و تغییر macroها، تبدیل شدن به اسمبلی و در نهایت linkشدن object fileها و تولید فایل PE نمایش داده شده و مرور کوتاهی بر روی ساختار PE به کمک PEBear انجام می‌دهیم. در نهایت نیز ساختارهای heap, stack و قرار گیری اطلاعات در آن‌ها به کمک Visual Studio نمایش داده می‌شود.
https://aparat.com/v/ST2Ia
https://youtu.be/pXRZaK6ZjqM

#windows #internals #debug #compile #stack #heap #pe #pebear #visualstudio #programming #cpp
👍16
سلام
در سری جدید ویدئوهای Windows Internals این هفته مروری بر اسمبلی ۶۴بیتی انجام می‌دهیم.

در این ویدئو ابتدا مروری بر روی رجیسترهای ۶۴بیتی انجام داده و سپس شیوه‌ی ایجاد یک فایل اسمبلی و کامپایل و لینک آن با سورس C++ در Visual Studio را نمایش می‌دهیم. پس از ایجاد یک فایل اسمبلی در VS به شرح ساختار آن و نحوه‌ی ایجاد یک تابع در آن و استفاده از تابع در کد C++ می‌پردازیم. در نهایت برای تمرین برنامه نویسی ۶۴بیتی یک تابع برای پیدا کردن طول رشته و کپی رشته از یک مبدا در یک مقصد پیاده‌سازی کرده و اجرای آنرا Trace می‌کنیم.
https://youtu.be/yJW2Jo56odM
https://aparat.com/v/N971W

لطفا منتشر کنید که دوستان علاقه‌مند استفاده کنند. اینم لینک کانال تلگرام من، عضو بشید که کلیه‌ی مواردی که قبلا منتشر شده و مواردی که در آینده قصد انتشار دارم رو داشته باشید:
https://t.me/OxAA55

#windows #internals #debug #visualstudio #cpp #x64 #assembly
👍115
دوستان سلام
تصمیم گرفتم در کنار روند آموزشی Internals Sessions که داریم بخش‌هایی از کلاس‌هایم رو هم در قالب ویدئوهای کوتاه منتشر کنم و یکسری از مفاهیم سیستم‌عامل رو شرح دهم.

در اولین قدم با ذکر یک مثال ساده، به بررسی تاثیر متغیرهای TLS (Thread Local Storage) در برنامه‌های چند نخی می‌پردازیم.

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

به عنوان مثال در برنامه‌نویسی C متغیر errno در فضای TLS نگه‌داری می‌شود که خطای رخ داده در threadهای مختلف فقط در همان thread بوده و مشکلی ایجاد نشود. در API ویندوز هم تابعی به اسم GetLastError وجود دارد که کار مشابهی می‌کند ولی این تابع مقدار یک متغیر موجود در TEB (Thread Environment Block) را باز می‌گرداند که در فضای TLS‌ نیست ولی آن هم Per Thread بوده و مفهوم مشابهی دارد.

در این ویدئو به بررسی شیوه‌ی تعریف متغیرهای TLS در ویندوز و تست آن می‌پردازیم.
لینک ویدئو در یوتیوب:
https://youtu.be/1SHLyoicm-s
لینک ویدئو در آپارات:
https://aparat.com/v/YTCgV


#ShortWinInternals #windows #internals #cpp #programming #threads #TLS
18👍6👏1
نمایش دمو از مفهوم Thread Context

مفهوم Thread Context در ویندوز به داده‌های ضروری اشاره دارد که وضعیت کنونی Thread را در زمان اجرا در پروسه تعریف می‌کند. این اطلاعات شامل مقادیر Registerها مثل RIP برای نگهداری آدرس بعدی که باید کد از آن اجرا شود، اشاره‌گرهای Stack و مقادیر Flagها برای مشخص کردن نتیجه‌ی اجرای دستور قبلی و وضعیت CPU‌ هستند.

زمانیکه CPU از یک Thread ‌گرفته شده و Thread دیگری برای اجرا انتخاب می‌شود، این اطلاعات توسط سیستم‌عامل ذخیره می‌شوند که پس از اینکه CPU مجدد در اختیار Thread جاری قرار گرفت، اجرا بدون مشکل بتواند ادامه پیدا کند. این عملیات همان چیزی است که در مباحث سیستم‌عامل به آن با عنوان Context Switching اشاره می‌شود. (دقت کنید که در ویندوز پروسه اجرا نشده و فقط یک Container برای فراهم کردن یک فضای مشترک و دسترسی به یکسری منابع است. آن چیزی که در ویندوز اجرا می‌شود Threadها هستند.)

در این ویدئو که بخشی از یکی ازکلاس‌هایم است، ابتدا به کمک برنامه نویسی به Thread Context دسترسی پیدا کرده و به کمک ابزارهای ProcessExplorer و WinDbg جزئیات و شیوه‌ی کار Thread را بررسی می‌کنیم. سپس تاثیر تغییر دادن Context‌ و جایگزین کردن RIP و تغییر مسیر اجرای Thread را بررسی می‌کنیم که با یکی از روش‌های Injection کد در Thread آشنا شویم.

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

#ShortWinInternals #windows #internals #cpp #programming #thread #context
👍151
بررسی قرارداد فراخوانی توابع در برنامه‌های ۳۲بیتی

در این ویدئو که بخشی از یکی از کلاس‌هایم است، در مورد قراردادهای مختلف فراخوانی توابع در برنامه‌های ۳۲بیتی صحبت کرده و در یک برنامه‌ی ساده شیوه‌ی انجام آن‌ها را نمایش می‌دهم.
این فراخوانی‌ها عبارتند از: 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