Binary، Hex، و واحدهای داده توضیح داده شده
واژهنامهای عملی از سیستمهای اعداد binary و hexadecimal و قراردادهای واحد داده مورد استفاده در برنامهنویسی، شبکهسازی، و کار تحقیقات دیجیتال.
هر byteای که در hex editor بررسی میکنید، هر subnet mask که محاسبه میکنید، هر اندازه فایلی که ابزاری گزارش میدهد، به مجموعه کوچکی از سیستمهای اعداد و قراردادهای واحد بستگی دارد. اگر اینها را غلط درک کنید، اندازه buffer را اشتباه تعیین میکنید، memory dump را غلط میخوانید، یا با همکار خود درباره اینکه 1 KB معادل 1000 یا 1024 byte است بحث میکنید.
Binary: پایهای که هر کامپیوتری واقعاً صحبت میکند
Binary مبنای 2 است — فقط 0 و 1. یک رقم binary یک bit است. هشت bit را با هم گروهبندی کنید و یک byte به دست میآید که میتواند 256 مقدار متفاوت را نشان دهد (0 تا 255 بدون علامت، یا -128 تا 127 با two's complement علامت دار).
وقتی 01001000 را میبینید، این 72 در مبنای ده است، که به اتفاق کد ASCII برای 'H' است. تبدیل دستی فقط جمع توانهای 2 از سمت راست است: 2^6 + 2^3 = 64 + 8 = 72. ابزارهایی مثل python3 -c "print(bin(72))" یا xxd روی یک فایل این کار را فوری انجام میدهند، اما درک ریاضی هنگام reverse engineering یک bitmask یا محاسبه مقادیر flag در TCP header مهم است.
Hexadecimal: اختصار binary
Hex مبنای 16 است، با استفاده از 0-9 و A-F. این سیستم وجود دارد چون binary در مقیاس بزرگ غیرقابل خواندن است و decimal به طور تمیز نقشهبرداری نمیشود بر روی مرزهای byte. یک رقم hex دقیقاً 4 bit را نشان میدهد، بنابراین دو رقم hex یک byte کامل را نشان میدهند — 0x00 تا 0xFF تمام 256 مقدار byte را با هیچ فضای اضافی پوشش میدهد.
این دلیل است که hex dumps به طور پیشفرض در ابزارهایی مثل xxd، hexdump -C، یا نمای memory یک disassembler استفاده میشوند. وقتی 0x4D 0x5A را در شروع یک فایل میبینید، این MZ header است که یک Windows PE executable را شناسایی میکند. آدرسهای memory، کدهای رنگ (#FF5733)، آدرسهای MAC، و آدرسهای IPv6 به طور قراردادی در hex نوشته میشوند چون به طور تمیز نقشهبرداری میشوند بر روی ساختار byte و nibble زیرین.
تبدیل hex به decimal: 0x4D = (4 × 16) + 13 = 77. در Python، int('4D', 16) بدون ریاضی دستی آن را میدهد، و hex(77) رفت و آمد دو طرفه را انجام میدهد.
جایی که binary، decimal، و hex واقعاً در عمل با هم ملاقات میکنند
IP addresses مثال خوبی از برخورد هر سه است. یک آدرس IPv4 مثل 192.168.1.1 واقعاً چهار byte است: 11000000.10101000.00000001.00000001 در binary، یا C0.A8.01.01 در hex. ریاضی subnetting — تعیین اینکه آیا دو آدرس در یک شبکه هستند — در اساس عملیات binary AND در مقابل یک subnet mask است، اگرچه برای سهولت همه چیز را در decimal نقطهدار مینویسیم.
در تحقیقات دیجیتال و تحلیل malware، به طور مداوم بین این نمایشها ترجمه میکنید. یک disassembler opcodes را در hex نشان میدهد، اما CPU binary خام را اجرا میکند، و مقادیر register اغلب به عنوان offsets decimal یا رشتههای ASCII تفسیر میشوند بسته به context. دانستن اینکه 0x41 هم عدد 65 است و هم کاراکتر ASCII 'A'، نوع الگوی شناخت است که تجزیه و تحلیل دستی را به طور قابلتوجهی تسریع میکند.
Data units: مسئله 1000 در مقابل 1024
این جایی است که مردم واقعاً آسیب میبینند. تولیدکنندگان ذخیرهسازی، filesystems، و سیستمعاملها همیشه درباره معنای یک
با کمک هوش مصنوعی نوشتهشده، بازبینی و منتشرشده توسط Michal Pilch (CISSP)، Korra Studio.
این یکی از یادداشتهای پایگاه دانش Korra Studio است — پلتفرم هر موضوع را با مربی یکبهیک جفت میکند.
شروع رایگانarrow_forward