شروع فصل دوم دوره 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
از امروز به صورت هفتگی هر ۴شنبه [[بسته به مشغله کاری ممکنه البته بشه یک چهارشنبه در میان]] در مورد 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
Telegram
OS Internals
مقاله و فیلم آموزش مدیریت و برنامهنویسی سیستمهای عامل، شبکه و امنیت اطلاعات.
مقالات من در ویرگول:
https://virgool.io/@akazemi
ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55
ارتباط با مدیر کانال از طریق:
@akazemi67
مقالات من در ویرگول:
https://virgool.io/@akazemi
ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55
ارتباط با مدیر کانال از طریق:
@akazemi67
👍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
در سری جدید ویدئوهای 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
YouTube
02.04) 64bit Assembly Demo [PER]
[Video in Persian]
I start this video with a tour of 64bit registers. After that, I go over the process of creating an assembly file in Visual Studio and the steps we must take to link it with our C++ source code. Then, we create a procedure in the assembly…
I start this video with a tour of 64bit registers. After that, I go over the process of creating an assembly file in Visual Studio and the steps we must take to link it with our C++ source code. Then, we create a procedure in the assembly…
👍11❤5
دوستان سلام
تصمیم گرفتم در کنار روند آموزشی 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
تصمیم گرفتم در کنار روند آموزشی 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
YouTube
Thread Local Storage in Windows [PER]
فضای حافظهای که پروسهها دارند، بین threadهای مختلفی که در پروسه ایجاد میشوند مشترک بوده و همگی به آن دسترسی دارند و علت اینکه در برنامه نویسی چندنخی باید به Synchronization بین نخها توجه کنیم همین موضوع است. ولی برخی مواقع داشتن فضایی که به ازای هر نخ…
❤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
مفهوم 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
YouTube
Thread Context in Windows [PER]
در این ویدئو که بخشی از یکی ازکلاسهایم است ابتدا به کمک برنامه نویسی به Thread Context دسترسی پیدا کرده و به کمک ابزارهای ProcessExplorer و WinDbg جزئیات آن و شیوهی کار Thread را بررسی میکنیم. سپس تاثیر تغییر دادن Context و جایگزین کردن RIP و تغییر مسیر…
👍15❤1
بررسی قرارداد فراخوانی توابع در برنامههای ۳۲بیتی
در این ویدئو که بخشی از یکی از کلاسهایم است، در مورد قراردادهای مختلف فراخوانی توابع در برنامههای ۳۲بیتی صحبت کرده و در یک برنامهی ساده شیوهی انجام آنها را نمایش میدهم.
این فراخوانیها عبارتند از: 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
در این ویدئو که بخشی از یکی از کلاسهایم است، در مورد قراردادهای مختلف فراخوانی توابع در برنامههای ۳۲بیتی صحبت کرده و در یک برنامهی ساده شیوهی انجام آنها را نمایش میدهم.
این فراخوانیها عبارتند از: 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
YouTube
Investigating 32bit Calling Conventions in Windows [PER]
در این ویدئو که بخشی از یکی از کلاسهایم است، در مورد قراردادهای مختلف فراخوانی در برنامههای ۳۲بیتی صحبت کرده و در یک برنامهی ساده شیوهی انجام آنها را نمایش میدهم.
این فراخوانیها عبارتند از: STDCALL، CDECL و FASTCALL
این فراخوانیها عبارتند از: STDCALL، CDECL و FASTCALL
❤11👍1