ماکروها در زبان اسمبلی
نوشــتن یک ماکرو روش دیگه ای برای اطمینان از برنامه نویسی مدولار به زبان اسمبلی است.
ماکرو دنباله ای از دستورالعمل هاست که با یک نام اختصاص داده میشه و میتوخه در هر نقطه از برنامه مورد استفاده قرار بگیره
در NASM ماکروها با دستورالعمل macro% و endmacro% تعریف میشه ماکرو با دستورالعمل macro% شروع میشه و با endmacro% به پایان میرسه
نحوه سینتکسش به صورت زیره:
number_of_params پارامتر های عدد رو نشون میده
macro_name نام ماکرو رو مشخص میکنه
ماکرو با اســتفاده از نام ماکرو به همراه پارامترهای لازم فراخوانی میشه هنگامی که شما نیاز دارید چند بار از دنباله دستورالعمل ها در یک برنامه اســتفاده کنید میتونید اون دستورالعمل ها رو در یک ماکرو قرار بدید و به جای نوشتن دستورالعمل ها از اون استفاده کنید
نوشــتن یک ماکرو روش دیگه ای برای اطمینان از برنامه نویسی مدولار به زبان اسمبلی است.
ماکرو دنباله ای از دستورالعمل هاست که با یک نام اختصاص داده میشه و میتوخه در هر نقطه از برنامه مورد استفاده قرار بگیره
در NASM ماکروها با دستورالعمل macro% و endmacro% تعریف میشه ماکرو با دستورالعمل macro% شروع میشه و با endmacro% به پایان میرسه
نحوه سینتکسش به صورت زیره:
macro macro_name
number_of_params%
<macro body>
endmacro%
number_of_params پارامتر های عدد رو نشون میده
macro_name نام ماکرو رو مشخص میکنه
ماکرو با اســتفاده از نام ماکرو به همراه پارامترهای لازم فراخوانی میشه هنگامی که شما نیاز دارید چند بار از دنباله دستورالعمل ها در یک برنامه اســتفاده کنید میتونید اون دستورالعمل ها رو در یک ماکرو قرار بدید و به جای نوشتن دستورالعمل ها از اون استفاده کنید
🔥6👍3
مدیریت فایل ها در زبان اسمبلی
سیستم هر داده ورودی یا خروجی رو به عنوان جریان بایت در نظر میگیره
سه جریان فایل استاندارد وجود داره:
سیستم هر داده ورودی یا خروجی رو به عنوان جریان بایت در نظر میگیره
سه جریان فایل استاندارد وجود داره:
ورودی استاندارد (stdin)
خروجی استاندارد (stdout)
خطای استاندارد (stderr)👍5🔥3
توصیف گر فایل File Denoscriptor
یک File Denoscriptor عدد صحیح 16 بیتی که به عنوان شناسه یک فایل اختصاص داده میشه وقتی که یک فایل جدید ایجاد شده یا یک فایل موجود باز میشه از File Denoscriptor برای دسترسی به فایل استفاده میشه
File Denoscriptor
جریان های استاندارد stderr ،stdout ,stdin
به ترتیب 0 1 2 هستن
یک File Denoscriptor عدد صحیح 16 بیتی که به عنوان شناسه یک فایل اختصاص داده میشه وقتی که یک فایل جدید ایجاد شده یا یک فایل موجود باز میشه از File Denoscriptor برای دسترسی به فایل استفاده میشه
File Denoscriptor
به ترتیب 0 1 2 هستن
👍8
یک روال یا تابع بازگشتی فرایندیه که خودش رو به طور مستقیم و یا غیر مستقیم فراخوانی می کنه بازگشت پذيري می تونه در الگوریتم های ریاضی زیادی مشاهده شه به عنوان مثال ، محاسبه فاکتوریل یک عدد رو در نظر بگیرید فاکتوریل عدد توسط یک معادله داده شده هست مثال:
Fact (n) = n * fact (n-1) for n > 0
به عنوان مثال: فاکتوریل 5 برابره با 1*2*3*4*5 = 5*فاکتوریل 4 هست و این میتونه نمونه خوبی برای نشون دادن یک روش بازگشتی باشه هر الگوریتم بازگشتی باید یک شرط پایان داشته باشد یعنی فراخوانی بازگشتی برنامه هنگام اجرای یک شرط باید متوقف بشه در مورد الگوریتم فاکتوریل شرط پایان زمانی مساوی میشه که (n (0 باشه
Fact (n) = n * fact (n-1) for n > 0
به عنوان مثال: فاکتوریل 5 برابره با 1*2*3*4*5 = 5*فاکتوریل 4 هست و این میتونه نمونه خوبی برای نشون دادن یک روش بازگشتی باشه هر الگوریتم بازگشتی باید یک شرط پایان داشته باشد یعنی فراخوانی بازگشتی برنامه هنگام اجرای یک شرط باید متوقف بشه در مورد الگوریتم فاکتوریل شرط پایان زمانی مساوی میشه که (n (0 باشه
🔥6
Memory Address Register یا MAR چیست ؟
این Register همونجور که از اسمش پیداست آدرس های حافظه از داده ها و دستورالعمل ها رو داخل خودش نگه میداره این Register برای دسترسی به داده ها و دستورالعمل ها از حافظه RAM در طی اجرا شدن دستورالعمل ها مورد استفاده قرار میگیره فرض کنید CPU میخاد برخی از داده ها رو در حافظه RAM ذخیره کنه و یا بر عکس میخاد داده هایی رو از حافظه RAM فراخوانی کنه CPU در این گونه مواقع میاد و آدرس های داده هایی که در حافظه RAM باید قرار بگیرن رو داخل رجیستر MAR به صورت موقت ذخیره میکنه اگر اینجوری نبود CPU نمیدونست که دستورالعمل ها در کدوم مکان از حافظه RAM باید ذخیره شن پس اگر منطقی به این قضیه فکر کنیم وجود رجیستری به نام MAR لازمه🔥7
اشاره گر فایل (Pointer File)
یک اشاره گر فایل مکان رو برای عمل خوندن یا نوشتن بعدی در فایل از نظر
بایت مشخص میکنه هر فایل به عنوان دنباله ای از بایت در نظر گرفته میشه
هر فایل باز با یک اشــاره گر فایل همراهه که offset در بایت ها رو مشخص میکنه نســبت به ابتدای فایل با باز کردن فایل اشاره گر فایل روی صفر تنظیم میشه
یک اشاره گر فایل مکان رو برای عمل خوندن یا نوشتن بعدی در فایل از نظر
بایت مشخص میکنه هر فایل به عنوان دنباله ای از بایت در نظر گرفته میشه
هر فایل باز با یک اشــاره گر فایل همراهه که offset در بایت ها رو مشخص میکنه نســبت به ابتدای فایل با باز کردن فایل اشاره گر فایل روی صفر تنظیم میشه
🔥7
مراحل مورد نیاز برای استفاده از فراخوان های سیستم یکیه
* شماره فراخوان سیستمی رو داخل رجیستری EAX قرار بدید
آرگومان های مربوط به فراخوان سیستمی در رجیسترهای EBX ، ECX و غیره رو ذخیره کنید
* با وقفه مربوطه رو فراخوانی کنید (80h)
* نتیجه معمولاً در ثبات EAX برمی گرده
👍10
ایجاد و باز کردن فایل
فراخوان سیستم ()sys_creat شماره 8 رو در ثبات EAX قرار بدید
فایل نیم (filename) رو در رجیستری EBX قرار بدید
مجوزهای فایل رو داخل رجیستری ECX قرار بدید
فراخوان سیستم توصیف گر فایل (file denoscriptor) ایجاد شده رو در ثبات EAX برمیگردونه در صورت بروز خطا کد خطا در ثبات EAX هست
فراخوان سیستم ()sys_creat شماره 8 رو در ثبات EAX قرار بدید
فایل نیم (filename) رو در رجیستری EBX قرار بدید
مجوزهای فایل رو داخل رجیستری ECX قرار بدید
فراخوان سیستم توصیف گر فایل (file denoscriptor) ایجاد شده رو در ثبات EAX برمیگردونه در صورت بروز خطا کد خطا در ثبات EAX هست
🔥8👍1
باز کردن فایل موجود
برای باز کردن فایل موجود کارهای زیر رو باید انجام بدیم
برای باز کردن فایل موجود کارهای زیر رو باید انجام بدیم
فراخوان سیستم ()sys_open شماره 5 را در ثبات EAX قرار بدید
فایل نیم filename را در ریجستری EBX قرار بدید
حالت دسترسی فایل را در رجیستری ECX قرار بدید
مجوزهای (permissions) فایل رو در رجیستری EDX قرار بدید
فراخوان سیستم توصیف گر فایل ایجاد شده رو داخل ثبات EAX برمی گردونه در صورت بروز خطا کد خطا در ثبات EAX است
در بین حالت های دستیابی به فایل متداول ترین اونا اینا هستند:
read-write (2) و read-only (0) و write-only (1)
👍7
خوندن از یک فایل
برای خوندن از یک فایل باید کارهای زیر رو انجام بدیم
برای خوندن از یک فایل باید کارهای زیر رو انجام بدیم
فراخوان سیستم ()sys_read شماره 3 رو داخل ثبات EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
اشاره گر به بافر ورودی رو داخل ثبات ECX قرار بدید
اندازه بافر رو قرار بدید یعنی شماره بایت ها برای خوندن رو داخل ثبات EDX قرار بدید system call تعداد بایت های خونده شده رو داخل ثبات EAX رو برمیگردونه در صورت بروز خطا کد خطا در EAX ثبت میشه
👍8
فلگ ها در اسمبلی (assembly) به نمایه هایی از وضعیت ها شرایط یا حالت های مختلف در برنامه هستن این فلگ ها به طور معمول به عنوان پارامتر هایی در دستورالعمل های اسمبلی استفاده میشن و عملکرد برنامه رو تعیین می کنن به طور کلی فلگ ها به دو دسته زیر تقسیم میشن:
1. فلگ های ورودی (Input Flags): این فلگ ها مقادیری از ورودی رو تعیین می کنن که برنامه باید با اون ها کار کنه مثلاً یک فلگ ورودی رو ممکنه برای تعیین اینکه یک عمل از نوع جمع یا تفریق باشد استفاده کنیم.
2. فلگ های خروجی (Output Flags): این فلگ ها مقادیری ان که برنامه برای خروجی تولید می کنه این فلگ ها ممکنه برای نشون دادن خطاها وضعیت های خاص یا نتایج برنامه استفاده شن استفاده از فلگ ها به برنامه نویس این امکان رو میده که برنامه رو برای تخصیص و ردیابی بهتر وضعیت و اطلاعات بهبود بده به عنوان مثال از فلگ ها برای اجرای شرایط مختلف در یک حلقه تکرار استفاده میشه و این امکان رو فراهم میکنه که بخش های مختلفی از یک برنامه معین شده و اجرایی هست
2. فلگ های خروجی (Output Flags): این فلگ ها مقادیری ان که برنامه برای خروجی تولید می کنه این فلگ ها ممکنه برای نشون دادن خطاها وضعیت های خاص یا نتایج برنامه استفاده شن استفاده از فلگ ها به برنامه نویس این امکان رو میده که برنامه رو برای تخصیص و ردیابی بهتر وضعیت و اطلاعات بهبود بده به عنوان مثال از فلگ ها برای اجرای شرایط مختلف در یک حلقه تکرار استفاده میشه و این امکان رو فراهم میکنه که بخش های مختلفی از یک برنامه معین شده و اجرایی هست
👍8
نوشتن به یک فایل
فراخوان سیستم sys_write () شماره 4 رو داخل رجیستر EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
اشاره گر به بافر خروجی رو داخل رجیستر ECX قرار بدید
اندازه بافر یعنی شماره بایت های نوشتن رو داخل رجیستر EDX قرار بدید
فراخوان سیستم تعداد واقعی بایت های نوشته شده در ثبات EAX رو برمی گردونه در صورت بروز خطا کد خطا در ثبت EAX هست
فراخوان سیستم sys_write () شماره 4 رو داخل رجیستر EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
اشاره گر به بافر خروجی رو داخل رجیستر ECX قرار بدید
اندازه بافر یعنی شماره بایت های نوشتن رو داخل رجیستر EDX قرار بدید
فراخوان سیستم تعداد واقعی بایت های نوشته شده در ثبات EAX رو برمی گردونه در صورت بروز خطا کد خطا در ثبت EAX هست
👍9
بستن فایل
فراخوان سیستم ()sys_close شماره 6 رو داخل ثبات EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
فراخوان سیستم در صورت بروز خطا کد خطا در ثبات EAX رو برمی گردونه
فراخوان سیستم ()sys_close شماره 6 رو داخل ثبات EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
فراخوان سیستم در صورت بروز خطا کد خطا در ثبات EAX رو برمی گردونه
👍9
به روز رسانی یک فایل
فراخوان سیستم sys_lseek () شماره 19 رو داخل ثبات EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
مقدار افست رو داخل رجیستری ECX قرار بدید
موقعیت منبع برای offset رو داخل رجیستری EDX قرار بدید
فراخوان سیستم در صورت بروز خطا کد خطا در ثبات EAX رو برمی گردونه
فراخوان سیستم sys_lseek () شماره 19 رو داخل ثبات EAX قرار بدید
توصیف گر فایل رو داخل رجیستری EBX قرار بدید
مقدار افست رو داخل رجیستری ECX قرار بدید
موقعیت منبع برای offset رو داخل رجیستری EDX قرار بدید
شروع فایل – مقدار 0
موقعیت فعلی – مقدار 1
پایان فایل – مقدار 2
فراخوان سیستم در صورت بروز خطا کد خطا در ثبات EAX رو برمی گردونه
👍9
مدیریت حافظه در زبان اسمبلی
فراخوان سیستم ()sys_brk توسط هسته ارائه میشه تا بتونه حافظه پویا رو اختصاص بده در این فراخوان حافظه درست پشت تصویر برنامه حافظه رو اختصاص میده این تابع سیستمی به شما امکان میده بالاترین آدرس موجود رو داخل بخش داده را تنظیم کنید
این فراخوان سیستمی یک پارامتر می گیره که بالاترین آدرس حافظه مورد نیاز برای تنظیم هست این مقدار در ثبات EBX ذخیره میشه
sys_brk در صورت بروز هر گونه خطا 1- رو برمیگردونه یا یک عدد منفی کد نشون دهنده خطاست رو برمی گردونه
فراخوان سیستم ()sys_brk توسط هسته ارائه میشه تا بتونه حافظه پویا رو اختصاص بده در این فراخوان حافظه درست پشت تصویر برنامه حافظه رو اختصاص میده این تابع سیستمی به شما امکان میده بالاترین آدرس موجود رو داخل بخش داده را تنظیم کنید
این فراخوان سیستمی یک پارامتر می گیره که بالاترین آدرس حافظه مورد نیاز برای تنظیم هست این مقدار در ثبات EBX ذخیره میشه
sys_brk در صورت بروز هر گونه خطا 1- رو برمیگردونه یا یک عدد منفی کد نشون دهنده خطاست رو برمی گردونه
👍4
برخی اصطلاحات در رمزنگاری
Encryption :
در علم cryptography به پنهان سازی اطلاعات گفته میشه
Decryption :
معکوس encryption هست و درcrypto به آشکار سازی اطلاعات پنهان شده گفته میشه
Plain text :
به متنی گفته میشه که معنای اون بدون تغییر خاصی قابل فهم هستش
Cipher :
به روشی برای تبدیل plain text به متنی که معناش پنهان باشه cipher گفته میشه
Cryptanalysis :
به هنر شکستن متن های cipher شده گفته میشه
Intruder :
در کلمه به معنای مزاحمه ولی در اینجا به معنای کسیه که یک کپی از cipher text داره و تمایل به شکستن رمز داره منظور از شکستن رمز یعنی decrypt کردن اون متن که خودش دو نوعه active-intruder که میتونه اطلاعات رو روی خط عوض کند و تغییر بده و passive intruder که فقط میتونه اطلاعات روی خط رو داشته باشه و قابلیت تغییر اونها رو نداره
👍5