1 265
订阅者
无数据24 小时
-37 天
+730 天
帖子存档
1 265
(Shadow space) فضای سایه چیست ؟
فضای سایه به عنوان یک مکان موقت برای ذخیرهسازی آرگومانهای ورودی عمل میکنه این فضا معمولاً به اندازهی 128 بایته و برای نگهداریه مقادیر ورودی به توابع استفاده میشه
1 265
طول رشته های متغیر میتونن به اندازه لازم کاراکتر داشته باشن به طور کلی طول رشته را با دو روش مشخص میکنیم
* معمولا طول رشته ذخیره میشه
* با استفاده از یک کاراکتر sentinel
میتونیم طول رشته رو با استفاده از نماد $ که نشون دهنده مقدار فعلی ذخیره کنیم مثال:
msg db َ Hello,Friendَ ,0xa
len equ $ - msg
اشــاره به بایت بعد از آخرین کاراکتر متغیر رشته msg بنابراین msg-$ طول رشته رو به ما میده
1 265
بیت ها (bit) در مهندسی معکوس
در مهندسی معکوس بیت ها که کوتاه شده از "binary digit" استفاده میشن مهمترین نقش رو دارن از اونجا که اطلاعات در سیستمها و فایلها به صورت بیتی ذخیره میشن مهندسین معکوس برای تحلیل و بازسازی اطلاعات از بیتها استفاده میکنن
بیتها به عنوان واحدهای کوچیکتر دادهها که معمولا با مقادیر 0 و 1 هستن و در قالب رشتههای بیتی در فایلها و حافظههای سیستم ذخیره میشن به مهندسین معکوس کمک میکنند تا اطلاعات رو تحلیل کنن و به حالت اولیه اون برگردن این فرایند از تحلیل فایلهای باینری یا کدگذاری دیجیتالی تا بازگشت دادههای اصلی با بهرهگیری از بیتها انجام میشه
جا به جایی بیت ها در دو مرحله انجام میشه اول به صورت پایین جا به جا میشن و بعد به صورت بالا
1 265
نمایش BCD
دو نمایش BCD وجود داره
نمایش BCD بسته بندی نشده Unpacked BCD
نمایش BCD بسته بندی شده packed BCD
در نمایش BCD بسته بندی نشــده هر بایت معادل دودویی یک رقم دسیمال را
ذخیره میکنه به عنوان مثال اعداد 1234 به صورت زیر ذخیره میشه
04H 03 02 01
برای پردازش این اعداد دو دستورالعمل وجود داره
AAM - Ascii Adjust After Multiplication AAD - Ascii Adjust Before Divisionچهار دستورالعمل تنظیم اسکی AAD و AAM و AAS و AAA با نمایش BCD بسته بندی نشده (Unpacked BCD) قابل استفاده ان در نمایش BCD بسته بندی شده هر رقم با استفاده از 4 بیت ذخیره میشه دو رقم دهدهی در یک بایت بسته بندی میشن مثال 1234به صورت زیر ذخیره میشه
34H 12برای پردازش این اعداد دو دستورالعمل وجود داره
DAA - Decimal Adjust After Addition
DAS - Decimal Adjust After Subtraction
نکته: در نمایش BCD بسته بندی شده هیچ پشتیبانی برای ضرب و تقسیم وجود نداره1 265
نمایش ASCII اعداد دهدهی به عنوان رشته ای از کاراکترهای ASCII ذخیره
میشن به عنوان مثال مقدار دهدهی 1234 به صورت زیر ذخیره میشه
34H 33 32 31
که 31H مقدار ASCII برای 1 اســت H32 مقدار ASCII برای ۲ است و غیره
چهار دستورالعمل برای پردازش اعداد در نمایش ASCII وجود دارد
*AAA - Ascii Adjust After Addition *AAS - Asciii Adjust After Subtraction *AAM - Asciii Adjust After Multiplication *AAD - Ascii Adjust Before Division
1 265
اعداد دودویی را میتوان به چند شکل نشان داد:
فرم ASCII
فرم دهی (BCD) Binary Coded Decimal
نمایش ASCII
1 265
اعداد در زبان اسمبلی
داده های عددی به طور کلی در سیستم دودویی نمایش داده میشن دستورالعمل
های حسابی روی داده های باینری عمل میکنن وقتی اعداد روی صفحه نمایش
داده میشن یا از صفحه کلید وارد میشن به شکل ASCII هستن
1 265
حلقه ها در زبان اسمبلی
دستورالعمل JMP میتونه برای پیاده سازی حلقه ها استفاده شه به عنوان مثال قطعه کد زیر میتونه 10 بار <LOOP-BODY> رو اجرا کنه
MOV CL,10 L1: <LOOP-BODY> DEC CL JNZ L1دستور اصلی LOOP LOOP lable
1 265
در عکس زیر دســتورالعمل های پرش شرطی مورد اســتفاده در داده های بدون علامت
استفاده شدن برای عملیات منطقی کاربرد دارن
1 265
پرش شرطی Jump Conditional
اگر برخی از شــروط مشــخص در پرش شرطی براورده شن جریان کنترل به
دستورالعمل هدف منتقل میشه بسته به شرایط و داده ها دستورالعمل های پرش شــرطی متعددی وجود داره برخی از اونا رو در عکس زیر میتونید ببینید
1 265
پرش غير شرطی Jump Unconditional
همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:
JMP label
1 265
دوستان ری اکشن بزنید که قوی تر بریم جلو و اگه میتونید لطفا کانال رو Share کنید
1 265
دستورالعمل CMP
دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:
CMP operand1,operand2
Operand1 = 10
Operand2 = 20
CMP 10,5
خب حالا CMP چکار میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه1 265
ساختار شرطی در زبان اسمبلی
اجرای شرط ها به زبان اسمبلی توسط چندین دستورالعمل حلقه و branching
پرش انجام میشه این دستورالعمل ها میتونن جریان کنترل رو داخل یک برنامه
تغییر بدن اجرای شرط ها در دو سناریو مشاهده میشن مثال:
روش غير شرطی Jump unconditional توسط دســتورالعمل JMP انجام میشه اجرای شرط ها اغلب شامل انتقال كنترل به آدرس دستورالعملیه كه از دستورالعمل اجرای الان پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرای دوباره همون مراحل
پرش شرطی jump Conditional بســته به شــرایط توســط مجموعــه ای از دســتورالعمل هــای پرش j condition انجام میشه دستورالعمل های شرطی کنترل رو با شکستن جریان پی در پی انتقال میدن و اونا رو با تغییر مقدار افست در IP انجام میدن
1 265
دستورالعمل NOT
عملیات NOT بیتی رو انجام میده عملیات NOT بیت ها رو در یک عملوند معکوس میکنه این عملوند میتونه داخل یک ریجستر یا حافظه باشه مثال:
Operand1: 0101 0011 After NOT -> Operand1: 1010 1100
1 265
دستورالعمل TEST
مثل عملیات AND کار میکنه، اما بر عکس دستور AND اولین عملکرد رو تغییر نمیده اگر بخایم بررسی کنیم ی عدد تو ریجستری زوج یا فرده میتونیم این کار رو با استفاده از دستور TEST بدون تغییر عدد اصلی انجام بدیم مثال:
TEST AL,01H JZ EVEN_NUMBER عدد زوج
