Ai000 Cybernetics QLab

#lowlevel
Канал
Логотип телеграм канала Ai000 Cybernetics QLab
@aioooirПродвигать
1,99 тыс.
подписчиков
219
фото
73
видео
62
ссылки
Ai000 Cybernetic QLab is a non-profit research place which is focus on novel defensive and offensive services to protect our customers. Admin: @clightning
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
In this video, we guide you through the complete setup process for a Rust programming environment, ensuring you're ready to start coding with Rust smoothly. We cover everything from installing Rustup, the essential Rust installer and version management tool, to configuring the C linker toolchain for seamless integration with external libraries.

YouTube: Part 2 Unlocking Rust - Setting Up Rust Programming Environment

@aioooir | #lowlevel #development #rust
In this video, Mohammad Hossein (a newly verified member of ACQL) dives deep into Rust, a modern programming language rapidly gaining popularity for its performance, safety, and reliability. He starts by exploring and overviewing Rust's key features, including its powerful memory safety without a garbage collector, its fearless concurrency model, and its focus on performance, which makes it ideal for system-level programming.

YouTube: Part 1 Unlocking Rust - Introduction and Overview of Rust Language

@aioooir | #lowlevel #development #rust
ببینید مبحث بالا که من به صورت کلی توضیح دادم، برای لینوکس هست و آنجا هم پیچیدگی وجود دارد، اما نه به اندازه‌ای که در ویندوز است. برای ویندوز این مباحث مربوط به فونت‌ها و نمایش الگوها خیلی پیچیده‌تر هستش (چون اساسا خود ویندوز یک سامانه بسیار غول و پیچیده هست).

وقتی ما در مورد مباحث مربوط به فونت‌ها و ... ویندوز صحبت می‌کینم، وارد زیرسیستم Windows Display Driver Model می‌شویم که آنجا به طور مستقل فونت درایور داریم. علاوه بر این، خود درایور فونت می‌تواند درایورهای دیگر برایش نوشته شود که بعنوان Upper Miniport یا Lower Miniport عمل می‌کنند. علاوه بر همه این‌ها، در خود ویندوز هم می‌شود یک سری DLL اضافه کرد که توی روال رندر فونت تاثیر بگذارند، اون روال لایه‌ای که بقیه جاها توی ویندوز هست، خلاصه، با پیچیدگی‌های خودش اینجا هم هست.

به عنوان مثال، قبلا در ویندوز یک درایور داشتیم به اسم atmfd.sys که بحث‌های فونت داخل آن انجام می‌شد اما بعدا توسط مهندسین و معماران ویندوز به زیرسیستم Graphics Device Interface منتقل شد. بنابراین خیلی از اتفاقاتی که در ارتباط با فونت‌ها رخ می‌دهد، گاهی اوقات حتی پاشون به win32k.sys هم باز می‌شود! در هر صورت، بحث داخل ویندوز آنقدر پیچیده است که نمی‌توان به این سادگی‌ها توضیح داد.

@aioooir | #lowlevel
اجازه بدهید در این قسمت در مورد استاندارد Single-Byte یا ASCII کمی از منظر سطح پایین صحبت کنیم. همانطور که شما می دانید، وقتی در برنامه‌نویسی سی یک متغیر کاراکتری تعریف می‌کردیم، مانند char variable = 'A' علاوه بر نمایش کاراکتری، می‌توانستیم در printf با استفاده از فرمت %d یک نمایش عدد صحیح هم از آن بگیریم.

آن نمایش عدد صحیح هم در حقیقت یک نمایش باینری هم داشت که منحصربفرد کاراکتر A هست. حال مسئله این است که سیستم‌عامل چطور می‌تواند این مجموعه از بیت‌ها را مانند یک المان گرافیکی (کاراکتری) نمایش بدهد؟ برای اینکه این مورد را متوجه شوید، باید دانش توسعه کرنل و سیستم‌عامل داشته باشید. یکی از بخش‌های مهم توسعه سیستم‌عامل رندر کردن همین Code Pageها یا همین Bitmapها است و این مسئله زمانی دشوارتر می‌شود که شما بخواهید کاراکترهای غیرلاتین مانند زبان پارسی و عربی را پارز و نمایش بدهید.

در هر صورت، این مسئله چندین مبحث دارد. اولین مبحث خود فونت است. در ساده‌ترین مورد از یک فونت، اتفاقی که رخ می‌دهد، برای مثلا عدد 65 یک کاراکتر یا تصویر مانند A سیستم‌عامل ترسیم خواهد کرد. مثلا در سیستم عامل لینوکس اگر شما سورس کد بخش فونت‌ها را مشاهده کنید، font_8x8.c در آنجا خواهید دید که مثلا یک کاراکتر مانند A دارای هشت بیت‌مپ است که سیستم‌عامل هنگام نمایش کاراکتر A به این جدول هشت عضوی رجوع خواهد کرد و مبتنی بر بیت پترنی که وجود دارد، پیکسل‌های سفید و سیاه را فعال‌سازی می‌کند که این موجب نمایش مثلا کاراکتر A خواهد شد.

مثلا در مورد زیر، جدول نقشه بیت های کاراکتر علامت ؟ و @ آورده شده است که کرنل لینوکس از آن برای ترسیم این کاراکترها استفاده خواهد کرد.

/* 63 0x3f '?' */
0x7c, /* 01111100 */
0xc6, /* 11000110 */
0x0c, /* 00001100 */
0x18, /* 00011000 */
0x18, /* 00011000 */
0x00, /* 00000000 */
0x18, /* 00011000 */
0x00, /* 00000000 */

/* 64 0x40 '@' */
0x7c, /* 01111100 */
0xc6, /* 11000110 */
0xde, /* 11011110 */
0xde, /* 11011110 */
0xde, /* 11011110 */
0xc0, /* 11000000 */
0x78, /* 01111000 */
0x00, /* 00000000 */

مورد بالا برای مبحث Single Byte بود، موارد زیر برای مبحث Unicode است:

/* 63 0x3f '?' */
0x00, 0x00, /* 0000000000 */
0x0e, 0x00, /* 0000111000 */
0x1f, 0x00, /* 0001111100 */
0x3b, 0x80, /* 0011101110 */
0x21, 0x80, /* 0010000110 */
0x01, 0x80, /* 0000000110 */
0x03, 0x00, /* 0000001100 */
0x06, 0x00, /* 0000011000 */
0x06, 0x00, /* 0000011000 */
0x0c, 0x00, /* 0000110000 */
0x0c, 0x00, /* 0000110000 */
0x00, 0x00, /* 0000000000 */
0x00, 0x00, /* 0000000000 */
0x0c, 0x00, /* 0000110000 */
0x0c, 0x00, /* 0000110000 */
0x00, 0x00, /* 0000000000 */
0x00, 0x00, /* 0000000000 */
0x00, 0x00, /* 0000000000 */

/* 64 0x40 '@' */
0x00, 0x00, /* 0000000000 */
0x00, 0x00, /* 0000000000 */
0x0e, 0x00, /* 0000111000 */
0x3f, 0x00, /* 0011111100 */
0x31, 0x80, /* 0011000110 */
0x65, 0x80, /* 0110010110 */
0x6d, 0x80, /* 0110110110 */
0x6d, 0x80, /* 0110110110 */
0x6d, 0x80, /* 0110110110 */
0x6d, 0x80, /* 0110110110 */
0x6f, 0x80, /* 0110111110 */
0x60, 0x00, /* 0110000000 */
0x31, 0x80, /* 0011000110 */
0x3f, 0x80, /* 0011111110 */
0x0f, 0x00, /* 0000111100 */
0x00, 0x00, /* 0000000000 */
0x00, 0x00, /* 0000000000 */
0x00, 0x00, /* 0000000000 */

حال این نمایش برای فونت‌های مختلف متفاوت است، که دیگر وارد آن مسئله نخواهم شد. خلاصه اینکه پیچیدگی بسیار زیادی این مسئله فونت‌ها در سیستم عامل دارد و ساده نیست. آیا در ویندوز هم داستان به این شکل است یا خیر؟ باید بگویم که نه در ویندوز داستان به این سادگی‌ها نیست (اگرچه کل مباحث با هم دیگر شباهت دارد و یک معماری لایه‌بندی شده برای رندر و پارز فونت‌ها در تمامی سیستم‌های عامل تعبیه شده است).

@aioooir | #lowlevel