به نام خدا
binary1
کاربران گرامی . سلام . من کارم با وبلاگ وحیدمی تمام شد . حقیقتا دیگه قصد ندارم در مورد صدها موضوع مختلف ؛ که هیچ ربطی به هم ندارند ، مطلب بنویسم .
بنابراین ؛ خیلی آرام و بی سر و صدا وبلاگ وحیدمی را رها کردم و دیگه به اون وبلاگ سنگین و پرحاشیه و جنجالی و دردسر ساز ؛ هیچ کاری ندارم .
من به اصل خودم برگشتم :
دنیای هگز ادیتورها
زبان ماشین
باینری
برنامه نویسی با هگز ادیتور
زبان اسمبلی
کاربردهای هگز ادیتور
برنامه نویسی بدون باگ
کاربردهای زبان اسمبلی
کاربردهای زبان ماشین
این عبارات ؛ شاید سرفصل مطالب بعدی باشند که احتمالا در آینده منتشر شوند .
اما از این پست به بعد ؛ عنوان تمام پست های وبلاگ باینسم ؛ فقط از یک کلمه تشکیل خواهند شد :
binary
این ترفند ؛ چند فایده دارد :
1. عنوان تمام پست ها با موضوع و محتوای وبلاگ همخوانی دارد
2. آدرس تمام پستها از خوانایی لازم برخوردار خواهند بود
3. تمام پست ها از یک کلمه ی کوچک و ساده به عنوان آدرس استفاده می کنند بنابراین آدرس تمام پست ها ؛ کوتاه و مفید خوهد شد .
4. شاید بتواند جلوی سو استفاده را بگیرد !! البته شاید !!
شروع درس :
برای اینکه بتوانیم باینری را در ذهن مان رمزگشایی نماییم مجبوریم ابتدا از زبان اسمبلی استفاده کنیم .
کم کم به مرور زمان ؛ اسمبلی را کنار می گذاریم و مستقیما با زبان باینری سر و کار خواهیم داشت .
من از اسمبلی استاندارد بین المللی یعنی دیس اسمبلی استفاده خواهم کرد .
گرچه دیس اسمبلی ؛ یک زبان سمبولیک استاندارد بین المللی محسوب می شود ولی هرگز آزادی را از ما نمی گیرد و ما کماکان آزادی کامل و انعطاف پذیری را تجربه خواهیم کرد .
دقیقا مثل باینری که اگرچه یک زبان کاملا رسمی و استاندارد و بین المللی است اما در اوج آزادی و انعطاف پذیری قرار دارد و هرگز دست ما را از پشت نمی بندد و به ما آزادی می دهد .
اگر به دنبال تعادل می گردید و دلتان می خواهد از یک زبان سطح میانی و متعادل و انعطاف پذیر و قابل فهم و آزاد و استاندارد و چندمنظوره استفاده کنید ؛ من زبان اسمبلی را به شما پیشنهاد می دهم .
به هرحال ؛ زبانهای ماشین و اسمبلی هرگز از هم جدا نمی شوند زیرا همانند یک روح در دو بدن می باشند .
برای استفاده ی همزمان از زبانهای باینری و اسمبلی ؛ بهتر است که از دیس اسمبلی و ابزارهای مهندسی معکوس استفاده کنید .
چند نمونه از ابزارهای مهندسی معکوس :
c32asm
hexplorer
winhex
spiro memory hacking
ollydbg
ida pro
x86dbg
x64dbg
hackman
و هر ابزاری که به شما اجازه دهد بطور همزمان ، از زبانهای ماشین و اسمبلی استفاده کنیدر.
اینها از دیس اسمبلی بعنوان اسمبلی استاندارد جهانی استفاده می کنند .
من از این پست به بعد ؛ برای تدریس زبانهای ماشین و اسمبلی ؛ براساس این نرم افزارهای مهندسی معکوس ؛ مطلب مربوطه را می نویسم و منتشر می کنم .
یعنی فقط از اسمبلی جهانی و استاندارد استفاده می کنم .
بنابراین ؛ دیگه به کامپایلرهای اسمبلی هیچ کاری نخواهم داشت زیرا این کامپایلرها آزادی را از من و شما سلب می کنند و گرامر خود را بر ما تحمیل می کنند و استاندارد نیستند .
خب برای شروع ؛ کدهای زیر را می نویسم
AAA
کد AAA ؛ دستور زبان اسمبلی است که برای ایجاد تعدیل در عملیات جمع اسکی بکار می رود .
این کد فقط در رجیسترهای 16 بیتی پردازنده کاربرد دارد . رجیستر AL .
بنابراین ؛ فقط در سیستم عامل های 16 بیتی از قبیل داس کاربرد دارد .
یعنی فقط بخش 16 بیتی پردازنده 32 بیتی یا 64 بیتی را بکار می برد .
بنابراین در ویندوزهای امروزی از این کد استفاده نمی شود زیرا هیچ تاثیری ندارد . زیرا ویندوزهای 32 و 64 بیتی از مدل حافظه محافظت شده و پردازنده های مدرن استفاده می نمایند .
یعنی هیچ ارتباطی با ناحیه 16 بیتی پردازنده های 32 و 64 بیتی ندارند .
بنابراین ، کد AAA فقط برای مقاصد آموزشی بکار می رود .
این کد ، حاصل جمع کدهای اسکی را تعدیل کرده و نتیجه را به درون رجیستر AL کپی می کند .
عدد 37 ؛ کد زبان ماشین در مبنای هگزادسیمال است .
هگزادسیمال یعنی شانزده تایی
یعنی ارقام 0 تا 9 و حروف A تا F
عدد 37 دقیقا با کد AAA مطابقت دارد .
بنابراین در باینری تمام سیستم عامل های سازگار با پردازنده ی intel ؛ عدد 37 دقیقا به معنای کد AAA می باشد .
کافی است از یک hex editor یا disassembler یا debugger استفاده کنید و به دنبال عدد 37 بگردید .
37=AAA
این رابطه ی نظیر به نظیر بین زبانهای ماشین و اسمبلی ؛ موجب می شود که به محض تسلط بر اسمبلی بتوانید بر زبان ماشین نیز مسلط شوید .
زبان ماشین که به آن باینری نیز گفته می شود یک زبان عددی است . یعنی بر اساس عدد ساخته شده است .
این عدد می تواند بر مبنای باینری باشد یا بر مبنای دسیمال یا هگزادسیمال یا اوکتال .
فعلا برای سهولت ؛ مبنای هکزادسیمال را بکار می برم .
عدد37 همانطور که در بالا نوشتم ؛ کد زبان ماشین در مبنای هگزادسیمال است و با کد AAA زبان اسمبلی کاملا مطابقت دارد .
سوال : منظور از باینری چیست ؟؟
جواب : باینری بطور کلی به زبان ماشین اطلاق می شود .
یعنی بجای اینکه بگویند کد زبان ماشین ویندوز ؛ می گویند : باینری ویندوز
اما زبان ماشین یک زبان عددی است و در چهار مبنا بکار می رود که معروفترین مبنا را باینری می نامند یعنی از ارقام 00000000 تا 11111111
باینری در اصل ؛ همان صفر و یک معروف است .
اما در عرف ؛ به زبان ماشین و صرف نظر از مبنا ؛ اصطلاحا باینری می گویند و خودشان را راحت می کنند!!
یعنی در عرف حتی به کدهای اوکتال یا دسیمال یا هگزادسیمال نیز باینری می گویند .
در حالیکه باینری در اصل فقط شامل یکی از مبناهای زبان ماشین می شود یعنی مبنای دوتایی 0 و 1
سوال : منظور از باینری در وبلاگ باینسم ، چیست ؟؟
جواب: در اصل ؛ منظور همان 0 و 1 است ولی علی الحساب ؛ برای سهولت نگارش کدها ؛ منظورم زبان ماشین خواهد بود یعنی زبان ماشین در مبنای هگزادسیمال .
البته اگر از مبنای دوتایی یعنی صفر و یک بعنوان باینری استفاده کنم این ابهام برطرف می شود ..
ضمنا چهار عمل اصلی یعنی جمع و تفریق و ضرب و تقسیم ؛ در مبنای دوتایی یعنی صفر و یک ؛ دقیقتر است و هیچ اشتباهی رخ نخواهد داد
ضمنا مبنای دوتایی ؛ با سیگنالها و ولتاژهای الکتریکی و جریان برق و مدارها و قطعات الکترونیکی و سخت افزار ؛ رابطه ی مستقیم و دوطرفه و دقیق دارد .
بنابراین ؛ در پستهای آینده ؛ فقط از مبنای باینری در مفهوم اصلی اش یعنی ارقام صفر و یک استفاده خواهم کرد تا این ابهامات برطرف شوند .
مابقی مباحث را به پست بعدی موکول می نمایم.
در پستهای بعدی ؛ باینری را براساس شکل واقعی اش یعنی صفر و یک تدریس خواهم کرد .انشاا...