0xDay
(Matrix 3/5) چگونه یک عنصر یا Element در ماتریکس A را تشخیص دهیم؟ @ZeroX_0Day
(Matrix 4/5)
نحوه پیاده سازی ماتریکس A که تو مثال بالا داشتیم در
@ZeroX_0Day
نحوه پیاده سازی ماتریکس A که تو مثال بالا داشتیم در
C با استفاده از آرایههای 2 بعدی. (2D Arrays)@ZeroX_0Day
0xDay
(Matrix 4/5) نحوه پیاده سازی ماتریکس A که تو مثال بالا داشتیم در C با استفاده از آرایههای 2 بعدی. (2D Arrays) @ZeroX_0Day
(Matrix 5/5)
خروجی کد.
@ZeroX_0Day
خروجی کد.
References:
- https://en.wikipedia.org/wiki/Matrix_(mathematics)
- https://www.youtube.com/watch?v=yRwQ7A6jVLk
- https://www.youtube.com/watch?v=lQ2DB5TPH1o
- https://www.w3schools.com/c/c_arrays_multi.php
- https://users.cs.utah.edu/~germain/PPS/Topics/matrix.html
- https://www.cs.swarthmore.edu/~newhall/unixhelp/C_arrays.html
- http://electron9.phys.utk.edu/optics421/modules/Numerical/matrix.htm
- https://ocw.mit.edu/courses/6-s096-effective-programming-in-c-and-c-january-iap-2014/295f17e070b66cbec4a88de25ff3694f_MIT6_S096IAP14_ass1_p2.pdf
@ZeroX_0Day
(Register Flags 1/1)
ثبات پرچم یا همان
رجیستر فلگ چیزی هست که داخل
حالا در معماری
رجیستر فلگهای مهمی داریم مثل:
1 -🫥
2 -🫥
3 -🫥
4 -🫥
5 -🫥
6 -🫥
حالا که با فلگهای مهم آشنا شدیم، باید بدونیم نسبت به هر عملیاتی که توسط
توضیح هر
1 - اگر در فلگ
2 - اگر در فلگ
3 - اگر در فلگ
4 - اگر در فلگ
5 - اگر در فلگ
6 - اگر در فلگ
References:
@ZeroX_0Day
ثبات پرچم یا همان
Register Flag چیست؟رجیستر فلگ چیزی هست که داخل
Central Processing Unit (CPU) یا همون پردازنده هست که یک سری Bit رو نگهداری میکنه که این Bitها نمایش دهنده وضعیت عملیلتهای مختلفی هست که CPU انجام داده.حالا در معماری
X86 رجیستر فلگ 16 بیت (Bit) هست که شامل اطلاعاتی هست که پس از انجام یک کاری انجام شده. به این اطلاعات وضعیت پرچم یا Status Register هم گویند به این دلیل که نتیجه آخرین عملیات اجرا شده توسط CPU رو نشون میده. حالا این فلگها به بیتهای مختلفی تقسیم میشن که هر Bit نشان دهنده یک Flag یا به اصطلاح نشان دهنده وضعیت است.رجیستر فلگهای مهمی داریم مثل:
1 -
Carry Flag CF2 -
Zero Flag ZF3 -
Sign Flag SF4 -
OverFlow Flag OF 5 -
Parity Flag PF6 -
Auxiliary Carry Flag AFحالا که با فلگهای مهم آشنا شدیم، باید بدونیم نسبت به هر عملیاتی که توسط
CPU مثل عملیات حسابی (Arithmetic) - عملیات منطقی (Logical Operations) انجام میشه مقدار اون Flagها به 0 یا 1 تغییر میکند.توضیح هر
Register Flag:1 - اگر در فلگ
Carry Flag که آن را با CF نشان میدهیم، یک Carry از Most Significant Bit (MSB) هنگام جمع (Addition) به دست آوریم یا همینطور تفریق (Subtraction) که یک Borrow در MSB داریم مقدار CF را 1 قرار میدهیم اما در غیر این صورت مقدار CF برابر با 0 خواهد بود.2 - اگر در فلگ
ZF نتیجه برابر با 0 بود مقدار ZF می شود 1 اما برای نتیجهای که 0 نیست یا به اصطلاح Non-Zero است مقدار ZF برابر با 0 است.3 - اگر در فلگ
SF مقدار MSB برابر 1 باشد بنابراین مقدار SF هم 1 است اما اگر مقدار MSB برابر با 0 قرار گرفت مقدار SF هم 0 می شود.4 - اگر در فلگ
OF سر ریز بافر رخ دهد مقدار OF برابر با 1 است اما در غیر این صورت مقدار OF برابر با 0 خواهد بود.5 - اگر در فلگ
PF تعداد Low Byte زوج یا همان Even باشد مقدار PF برابر با 1 است اما اگر تعداد Low Byte فرد یا Odd بود بنابراین مقدار PF هم برابر با 0 خواهد بود.6 - اگر در فلگ
AF عملیات حسابی یا همان (Arithmetic Operations) یک Carry یا یک Borrow رخ دهد مقدار AF برابر با 1 است در غیر این صورت مقدار AF برابر با 0 خواهد بود.References:
- https://en.wikipedia.org/wiki/FLAGS_register
- https://www.geeksforgeeks.org/flag-register-8086-microprocessor/
- https://www.cs.princeton.edu/courses/archive/fall09/cos375/IA32StatusFlags.pdf
- https://stackoverflow.com/questions/73362953/how-is-the-overflow-flag-not-set-after-this-addition
- https://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html
- https://www.cs.uaf.edu/2009/fall/cs301/lecture/12_07_flags.html
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
ممکنه براتون سوال پیش بیاد در معماری ❓
همینطور که میدونید
1.
2.
3.
4.
5.
6.
7.
8.
رجیسترهای (
1.
2.
3.
4.
5.
6.
7.
8.
رجیسترهای (
1.
2.
3.
4.
References:
@ZeroX_0Day
X86 چه نوع Registerهایی وجود داره؟ همینطور که میدونید
X86 به معنی 32 بیت (Bits) هست که چنین Registerهایی داریم که 8تای آنها رجیسترهای عمومی 32 بیتی (Bits) یا General Purpose Registers نام دارند. (نکته: در عکس اول RAX رو برای مثال آوردم که مربوط به معماری X64 هست و بنابراین 64 Bits هست.)1.
EAX2.
EBX3.
ECX4.
EDX5.
ESI6.
EDI7.
ESP (Stack Pointer)8.
EBP (Base Pointer)رجیسترهای (
Registers) 16 بیتی (Bits):1.
AX2.
BX3.
CX4.
DX5.
SI6.
DI7.
SP8.
BPرجیسترهای (
Registers) 8 بیتی (Bits):1.
AH AL2.
BH BL3.
CH CL4.
DH DLReferences:
- https://www.cs.virginia.edu/~evans/cs216/guides/x86.html
- https://www.nayuki.io/page/a-fundamental-introduction-to-x86-assembly-programming
- https://www.geeksforgeeks.org/general-purpose-registers-8086-microprocessor/
- https://www.eejournal.com/article/mastering-x86-memory-segmentation/
- https://www.tutorialspoint.com/what-are-the-cpu-general-purpose-registers
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
(X86 (
📌 نگاهی بهتر به
در معماری
1️⃣ - 🫥
این
کاربرد آن در کمک کردن به پردازنده (
به یاد داشته باشید در فلگ
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
2️⃣ - 🫥
این فلگ زمانی تنظیم (
برای مثال اگر در جمع (
حال اگر، تفریق (
در ریزپردازنده (
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
3️⃣ - 🫥
این فلگ زمانی تنظیم (
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
4️⃣ - 🫥
این فلگ زمانی تنظیم (
به طور کلی اگر فلگ
اگر فلگ
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
5️⃣ - 🫥
این فلگ زمانی تنظیم (
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
6️⃣ - 🫥
این فلگ زمانی تنظیم (
فلگ AF زمانی برابر با 0 خواهد بود که بین Lower 4 Bits هیچ Carry یا Borrowای در طول عملیات رخ ندهد.
@ZeroX_0Day
80286) Register Flags)X86 Flag Registerدر معماری
X86 تعداد 6 فلگ رجیستر (Flag Register) داریم که به آنها پرچم وضعیت یا پرچم حسابی Status or Arithmetic Flags هم نیز گویند. آز انها برای ثبت اطلاعات مربوط به آخرین دستورات حسابی یا منطقی اجرا شده در CPU استفاده میشود و به طور کلی نشان دهنده اتفاقات یا رخدادهای انجام شده حین انجام یک عملیات است. 6 فلگ رجیستری که با آنها در این موضوع سر و کار داریم عبارتاند از:Zero Flag ZFاین
Flag اصطلاحا زمانی تنطیم (Set) میشود که نتیجه آخرین دستورات (Instruction) حسابی (Arithmetic) که اجرا میشوند صفر (0) باشد. کاربرد آن در کمک کردن به پردازنده (
Processor) است که میتواند تشخیص دهد دو مقدار برابر هستند یا Countdownآن به صفر رسیده است.به یاد داشته باشید در فلگ
ZF، عملگرهای منطقی (Logic Operation) و حسابی (Arithmetic Operation) نیز مانند XOR هم میتواند باعث ست شدن ZF بشود.Carry Flag CFاین فلگ زمانی تنظیم (
Set) میشود که آخرین عملیات حسابی (Arithmetic Operation) که روی دو عدد صحیح بدون علامت (Two Unsigned Integers) انجام می شود، نتیجه آن خیلی بزرگ یا خیلی کوچک باشد که آن را خارج از محدوده مینامند (Out Of Range). به زبان دیگر، این فلگ زمانی برابر با 1 خواهد گرفت که جواب آن عملیات حسابی Out Of Range باشد به طوری که سایز Register بیشتر باشد و درون آن جای نگیرد. برای مثال اگر در جمع (
ADD) دو عدد جواب عملیات طوری بود که فیت (Fit) اندازه رجیستر (Register) نباشد فلگ CF ست میشود (برابر با 1 می شود)حال اگر، تفریق (
SUB) دو عدد جوابی کوچکتر از 0 را به ما نشان دهد، فلگ CF باز هم ست میشود و برابر با 1 قرار میگیرد.در ریزپردازنده (
Microprocessor) 80286 تعداد بیتهای موجود 16 بیت است.Overflow Flag OFاین فلگ زمانی تنظیم (
Set) میشود که یک عملیات روی اعداد صحیح علامت دار (Signed Integers) منجر به Overflow یا Underflow شود.Sign Flag SFاین فلگ زمانی تنظیم (
Set) میشود که MSB یا (Most Significant Bit) برابر 1 باشد. میدانیم زمانی که MSB ما برابر با 1 است در نتیجه جواب یک عدد منفی (Negative).به طور کلی اگر فلگ
SF برابر با 0 باشد که نشان میدهد MSB هم 0 است، بیانگر این موضوع است که نتیجه ما یک عدد مثبت (Positive) یا صفر (0) است.اگر فلگ
SF برابر با 1 باشد که نشان میدهد MSB هم 1 است، بیانگر این موضوع است که نتیجه ما یک عدد منفی (Negative) است.Parity Flag PFاین فلگ زمانی تنظیم (
Set) میشود که LSB یا (Least Significant Byte) یا به عبارت دیگر 8 بیت (Bits) اول نتیجه از سمت راست، تعداد 1های موجود در آن 8 بیت زوج (Even) باشد که در این صورت فلگ PF برابر با 1 قرار میگیرد و به آن همچنین (Even Parity) هم نیز گویند. حال اگر تعداد 1های موجود در LSB یا همان 8 بیت اول فرد (Odd) باشد بنابراین فلگ PF برابر با 0 خواهد بود که به آن همچنین (Odd Parity) هم نیز گویند.Auxiliary Flag AFاین فلگ زمانی تنظیم (
Set) میشود که در بین 4 بیت (Bits) پایینی که به آن (Lower 4 Bits) هم میگویند، یک Carry یا یک Borrow رخ دهد. در این صورت فلگ AF برابر با 1 خواهد بود.فلگ AF زمانی برابر با 0 خواهد بود که بین Lower 4 Bits هیچ Carry یا Borrowای در طول عملیات رخ ندهد.
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
(Overflow & Underflow 1/4)
📌 سرریز (
سرریز یا همان (
🔖 نکته: ممکن است عملیات ضرب (
در ریاضیات (
برای مثال یک نوع دادهای داریم به اسم
به طور کلی اگر بخواهیم آن را با مجموعه (
حال اگر تصور کنیم، سایز
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
⁉️ چگونه این محدوده بر اساس تعداد
در اعداد علامت دار (
بنابراین:
در اعداد علامت دار (
بنابراین:
در نتیجه محدوده یا همان (
🔤
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
پاریز یا همان (
در پست بعدی بهتر میتونیم
@ZeroX_0Day
Overflow) و پاریز (Underflow) چیست و چه زمانی رخ میدهد؟سرریز یا همان (
Overflow) به این معناست که اگر با جمع (Addition) دو عدد مثبت (Positive) نتیجه عددی منفی (Negative) به دست آمد، بدان معناست که Overflow رخ داده است. Multiplication) هم باعث این موضوع شود.در ریاضیات (
Mathematics) جمع دو عدد Positive همواره Positive خواهد ماند اما در Computer چون برای نوع دادههای (Data Types) اندازه (Size)های مختلفی در نظر گرفته شده است بنابراین اگر جمع آن دو عدد Positive از بالاترین مرز آن (Maximum Value) عبور کند در آن محدوده (Range) قابل نمایش نیست بنابراین به آن نتیجه، خارج از محدوده یا (Out Of Range) گویند.برای مثال یک نوع دادهای داریم به اسم
int که برای نمایش اعداد Integer استفاده میشود. همانطور که میدانید اعداد Integer همان اعداد صحیح هستند که در ریاضیات آن را با ℤ نمایش میدهیم.به طور کلی اگر بخواهیم آن را با مجموعه (
Sets) نمایش دهیم:ℤ = {... , -4 , -3 , -2 , -1 , 0, 1 , 2 , 3 , 4, ...}حال اگر تصور کنیم، سایز
intای که داریم 16 بیتی است، فقط میتوانیم اعداد بین آن را نمایش دهیم.Bit ها مشخص میشود؟در اعداد علامت دار (
Signed Numbers)، برای اعداد حداقل (Minimum Value) از فرمول (2ⁿ⁻¹)- استفاده میکنیم. (به یاد داشته باشید مقدار n در اینجا مقدار Bits است.)بنابراین:
-(2¹⁶⁻¹) = -32,768 —> Minimum Valueدر اعداد علامت دار (
Signed Numbers)، برای اعداد حداکثر (Maximum Value) از فرمول 2ⁿ⁻¹ - 1 استفاده میکنیم. (به یاد داشته باشید مقدار n در اینجا مقدار Bits است.)بنابراین:
2¹⁶⁻¹ -1 = 32,767 —> Maximum Valueدر نتیجه محدوده یا همان (
Range)ای که برای int16 داریم میشود:-32,768 32,767پاریز یا همان (
Underflow) به این معناست که اگر با تفریق (Subtraction) دو عدد به نتیجهای برسیم که آن منفی (Negative) باشد و همچنین از رنج و محدودهای که برای آن در هر بیت تعریف شده کمتر باشد Underflow رخ داده است.در پست بعدی بهتر میتونیم
Overflow و Underflow را درک کنیم.@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2 1 1
0xDay
(Overflow & Underflow 1/4) 📌 سرریز (Overflow) و پاریز (Underflow) چیست و چه زمانی رخ میدهد؟ سرریز یا همان (Overflow) به این معناست که اگر با جمع (Addition) دو عدد مثبت (Positive) نتیجه عددی منفی (Negative) به دست آمد، بدان معناست که Overflow رخ داده است.…
(Overflow & Underflow 2/4)
همانطور که میبینید یک متغیر از نوع و سایز
اگر این مقدار را جمع با
@ZeroX_0Day
همانطور که میبینید یک متغیر از نوع و سایز
int16_t و آن را به اسم MaximumValueOfInt16 نام گذاری کردیم و مقدار دهی رو انجام دادیم.اگر این مقدار را جمع با
1 کنیم میبینید که Overflow رخ میدهد و مقدار منفی به ما نشان میدهد.// Example of Overflow
#include <stdio.h>
#include <stdint.h> // Needed to use for int16
int main() {
// Int16 is -32768 & +32767
int16_t MaximumValueOfInt16 = 32767; // +32767 is the Maximum in int16
printf("This is the Maximum Value in int Data Type and 16 bits: %d\n",MaximumValueOfInt16);
printf("This is an example of Overflow in int Data Type and 16 bits: %d\n",(int16_t)(MaximumValueOfInt16+1));
return 0;
}
@ZeroX_0Day
0xDay
(Overflow & Underflow 2/4) همانطور که میبینید یک متغیر از نوع و سایز int16_t و آن را به اسم MaximumValueOfInt16 نام گذاری کردیم و مقدار دهی رو انجام دادیم. اگر این مقدار را جمع با 1 کنیم میبینید که Overflow رخ میدهد و مقدار منفی به ما نشان میدهد. //…
(Overflow & Underflow 3/4)
انجام مثال برای
تنها تفاوت در تفریق متغیر
@ZeroX_0Day
انجام مثال برای
Underflowتنها تفاوت در تفریق متغیر
MinimumValueOfInt16 به 1 است.// Example of Underflow
#include <stdio.h>
#include <stdint.h> // Needed to use for int16
int main() {
// Int16 is -32768 & +32767
int16_t MinimumValueOfInt16 = -32768; // -32768 is the Minimum in int16
printf("This is the Minimum Value in int Data Type and 16 bits: %d\n",MinimumValueOfInt16);
printf("This is an example of Underflow in int Data Type and 16 bits: %d\n",(int16_t)(MinimumValueOfInt16-1));
return 0;
}
@ZeroX_0Day
0xDay
(Overflow & Underflow 3/4) انجام مثال برای Underflow تنها تفاوت در تفریق متغیر MinimumValueOfInt16 به 1 است. // Example of Underflow #include <stdio.h> #include <stdint.h> // Needed to use for int16 int main() { // Int16 is -32768 & +32767 int16_t…
(Overflow & Underflow 4/4)
همچنین با استفاده از
@ZeroX_0Day
همچنین با استفاده از
sizeof میتوانیم متوجه Size یک Variable شویم.// Example of Underflow
#include <stdio.h>
#include <stdint.h> // Needed to use for int16
int main() {
// Int16 is -32768 & +32767
printf("UNDERFLOW\n");
int16_t MinimumValueOfInt16 = -32768; // // -32768 is the Minimum in int16
printf("This is the Minimum Value in int Data Type and 16 bits: %d\n",MinimumValueOfInt16);
printf("This is an example of Underflow in int Data Type and 16 bits: %d\n",(int16_t)(MinimumValueOfInt16-1));
printf("Size of MinimumValueOfInt16: %d Bits\n\n\n",sizeof(MinimumValueOfInt16) * 8);
printf("OVERFLOW\n");
int16_t MaximumValueOfInt16 = 32767; // +32767 is the Maximum in int16
printf("This is the Maximum Value in int Data Type and 16 bits: %d\n",MaximumValueOfInt16);
printf("This is an example of Overflow in int Data Type and 16 bits: %d\n",(int16_t)(MaximumValueOfInt16+1));
printf("Size of MaximumValueOfInt16: %d Bits\n",sizeof(MaximumValueOfInt16) * 8);
return 0;
}
@ZeroX_0Day
(Binary Addition & Show The X86 Flag Registers 1/11)
📌 نحوه انجام جمع (
اگر فرض کنیم دو عدد در مبنا
برای مثال اعداد فرضی که داریم
ابتدا باید هر 2 عدد را تبدیل به
میدانیم
اکنون باید بدانیم هر کدام یک از حروفهای
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
حال که با موارد ابتدایی در دنیای
برای
بنابراین به نتیجه زیر میرسیم:
برای درک بهتر در عکس نحوه تبدیل در پست بعدی نشان داده شده است.
@ZeroX_0Day
Addition) در سیستم باینری (Binary) و مشخص کردن فلگ رجیسترهااگر فرض کنیم دو عدد در مبنا
Hexadecimal یا همان مبنا 16 داریم و از ما خواسته شده است آنهارا با هم جمع (Addition) کنیم چطوری باید این کار رو انجام داد؟برای مثال اعداد فرضی که داریم
3CD6 و 5B9C است:3CD6 + 5B9Cابتدا باید هر 2 عدد را تبدیل به
0 یا 1، یا به عبارتی بهتر تبدیل به سیستم Binary کرد.میدانیم
Hexadecimal شامل اعداد 0-9 و همینطور حروف A-F میشود.Hexadecimal:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
اکنون باید بدانیم هر کدام یک از حروفهای
Hexadecimal برابر با چه مقداری است.A: 10
B: 11
C: 12
D: 13
E: 14
F: 15
حال که با موارد ابتدایی در دنیای
Hexadecimal آشنا شدیم، برای تبدیل آمادهایم:برای
3CD6 به شکل زیر عمل میکنیم:3CD6 (Hexadecimal):3 (Hexadecimal) —> 3 C (Hexadecimal) —> 12D (Hexadecimal) —> 13 6 (Hexadecimal) —> 6بنابراین به نتیجه زیر میرسیم:
3 12 13 6برای درک بهتر در عکس نحوه تبدیل در پست بعدی نشان داده شده است.
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
0xDay
(Binary Addition & Show The X86 Flag Registers 1/11) 📌 نحوه انجام جمع (Addition) در سیستم باینری (Binary) و مشخص کردن فلگ رجیسترها اگر فرض کنیم دو عدد در مبنا Hexadecimal یا همان مبنا 16 داریم و از ما خواسته شده است آنهارا با هم جمع (Addition) کنیم چطوری…
(Binary Addition & Show The X86 Flag Registers 2/11)
📌 نحوه تبدیل
❓ جریان استفاده از
میدانیم
در نتیجه میدونیم
وقتی نیاز داشته باشیم چیزی رو تبدیل به
در
@ZeroX_0Day
3CD6 در Hexadecimal به Binary1 2 4 8 چیست برای تبدیل به Binary چیست؟میدانیم
Hexadecimal به معنای مبنا (Base) 16 است. برای اینکه متوجه بشیم چه اعدادی در یک مبنا وجود دارند از فرمول n-1 استفاده میکنیم:n - 1 = 16 - 1 = 15
در نتیجه میدونیم
Hexadecimal از 0 تا 15 است که 0-9 را با عدد و از 10 تا 15 را با حروف البفا انگلیسی A تا F نشان میدهند که قبلا به آن اشاره کردیم.وقتی نیاز داشته باشیم چیزی رو تبدیل به
Binary کنیم بهتره توانهای 2 رو یک با در ذهن مرور کنیم:1024 512 256 128 64 32 16 8 4 2 1
در
Hexadecimal نهایت و بزرگترین عددی که میتونیم داشته باشیم F یا همان 15 است، در توان 2هایی که داریم باید عددهایی را استفاده کنیم که جمع آنها 15 شود تا بتواند بزرگترین عدد در Hexadecimal را پوشش دهد. بنابراین:8 + 4 + 2 + 1 = 15
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
0xDay
(Binary Addition & Show The X86 Flag Registers 2/11) 📌 نحوه تبدیل 3CD6 در Hexadecimal به Binary ❓ جریان استفاده از 1 2 4 8 چیست برای تبدیل به Binary چیست؟ میدانیم Hexadecimal به معنای مبنا (Base) 16 است. برای اینکه متوجه بشیم چه اعدادی در یک مبنا وجود دارند…
(Binary Addition & Show The X86 Flag Registers 3/11)
📌 نحوه تبدیل
@ZeroX_0Day
5B9C در Hexadecimal به Binary@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
0xDay
(Binary Addition & Show The X86 Flag Registers 3/11) 📌 نحوه تبدیل 5B9C در Hexadecimal به Binary @ZeroX_0Day
(Binary Addition & Show The X86 Flag Registers 4/11)
📌 جمع باینری (
در نهایت هر دو عدد باینری حاصل تبدیل زیر هم مینویسیم و سپس برای جمع این دو عدد اقدام میکنیم.
جمع
در 2 قانون آخر باید دقت داشته باشیم، اگر
@ZeroX_0Day
Binary)در نهایت هر دو عدد باینری حاصل تبدیل زیر هم مینویسیم و سپس برای جمع این دو عدد اقدام میکنیم.
جمع
Binary هیچ تفاوتی با جمع کردن 2 عدد معمولی در دنیای Decimal ندارد اما در دنیای Binary یک قانون وجود دارد که باید به آن هنگام انجام عملیات توجه کنیم:0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 ( Carry 1 to the next significant bit)1 + 1 + 1 = 11 ( Carry 1 to the next significant bit)در 2 قانون آخر باید دقت داشته باشیم، اگر
1 + 1 داشته باشیم میشود 10 که باید 0 را پایین نوشته و عدد 1 را Carry کنیم به Bit بعدی و همینطور اگر داشته باشیم 1 + 1 + 1 که میشود 11 باید 1 را بنویسیم و 1 را به Bit بعدی Carry کنیم.@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
0xDay
(Binary Addition & Show The X86 Flag Registers 4/11) 📌 جمع باینری (Binary) در نهایت هر دو عدد باینری حاصل تبدیل زیر هم مینویسیم و سپس برای جمع این دو عدد اقدام میکنیم. جمع Binary هیچ تفاوتی با جمع کردن 2 عدد معمولی در دنیای Decimal ندارد اما در دنیای Binary…
(Binary Addition & Show The X86 Flag Registers 5/11)
📌 مشخص کردن رجیستر فلگها (
اولین فلگ که سعی در مشخص کردنش داریم فلگ🔤 🔤 است.
با توجه به سایر توضیحاتی که قبلا در چنل نوشتم (پست مربوط به فلگها - نگاهی عمیق تر به فلگها) هر فلگ رو مشخص میکنیم، اگر که پست مربوط به شرح فلگهارو متوجه نشدید جای نگرانی نیست چون توی این مثال سعی میکنم ساده توضیح بدم تا دچار چالش هنگام متوجه و درک فلگها نشوید.
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
همانطور که میدانید اگر جواب ما همه بیتهایش برابر با
در این مثال که حل کردیم جوابی که داریم همه بیتها برابر با
1️⃣ -
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
دومین فلگ که باید آن را تعیین کنیم🔤 🔤 یا همان
در بیت شانزدهام هیچ
2️⃣ -
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
سومین فلگ که باید تعیین شود🔤 🔤 یا
از آنجایی که میدانیم اگر
3️⃣ -
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
چهارمین فلگ که نیازمند تعیین شدن است🔤 🔤 یا
با توجه به تعریفات گذشته راجب فلگها، باید بدانید زمانی که
4️⃣ -
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
پنجمین فلگ که راجب آن صحبت خواهیم کرد🔤 🔤 یا همان
برای اینکه بتوانیم این مورد را بهتر مشخص و حل کنیم، باید بدانیم واحدی به اسم Nibble وجود دارد که به معنای این است که هر
ما نیاز به
در این مورد ما تعداد
5️⃣ -
🐲 🐲 🐲 🐲 🐲 🐲 🐲 🐲
ششمین فلگ و آخرین فلگ🔤 🔤 یا
در این فلگ با دو مقدار
در این مورد به شکل زیر است مقدار
همانطور که میبینید در بیت
6️⃣ -
Note:
عکسهای مربوط به ترسیم و نشان دادن هر Flag را به زودی آپلود خواهم کرد.
@ZeroX_0Day
X86 Flag Regiters)اولین فلگ که سعی در مشخص کردنش داریم فلگ
با توجه به سایر توضیحاتی که قبلا در چنل نوشتم (پست مربوط به فلگها - نگاهی عمیق تر به فلگها) هر فلگ رو مشخص میکنیم، اگر که پست مربوط به شرح فلگهارو متوجه نشدید جای نگرانی نیست چون توی این مثال سعی میکنم ساده توضیح بدم تا دچار چالش هنگام متوجه و درک فلگها نشوید.
همانطور که میدانید اگر جواب ما همه بیتهایش برابر با
0 بود فلگ Zero Flag برابر با 1 میشود.در این مثال که حل کردیم جوابی که داریم همه بیتها برابر با
0 نیست در نتیجه فلگ ZF نباید ست شود بنابراین برابر با 0 خواهد بود. (اصطلاحا به این شرایط موجود در بیتها که همه صفر نباشند، Non-Zero گویند.)Zero Flag = 0دومین فلگ که باید آن را تعیین کنیم
Carry Flag است.در بیت شانزدهام هیچ
Carry خارج نشده، بنابراین مقدار Carry Flag برابر با 0 میباشد. (در عکس به آن اشاره خواهم کرد)Carry Flag = 0سومین فلگ که باید تعیین شود
Overflow Flag است.از آنجایی که میدانیم اگر
MSB برابر با 1 باشد با یک عدد منفی (Negative) سر و کار داریم در نتیجه OF برابر با 1 خواهد بود زیرا علامت عدد مثبت اگر به MSBآن توجه کنید 0 است در نتیجه یک عدد مثبت (Positive) است و همچنین عدد دوم هم MSBآن 0 است پس آن هم یک عدد مثبت است حال وقتی به نتیجه این عملیات جمع نگاه میکنیم متوجه خواهیم شد که MSBآن 1 است بنابراین حاصل دو عدد مثبت (Positive) یک عدد منفی (Negative) شده است. این بیانگر این موضوع است که حاصل جواب ما عددی بزرگ تر از اندازه (Size) رنج و محدوده 16 بیتی است. قبلا به این موضوع پرداختهایم که بزرگ ترین عدد در 16 بیت 32,767+ است و عددی بزرگ تر از این بی شک Overflow خواهد بود، به همین دلیل است که در این مورد Overflow برابر 1 خواهد بود. (راجب این موضوع ممکن در آینده عمیق تر مطلبی بنویسم)Overflow Flag = 1چهارمین فلگ که نیازمند تعیین شدن است
Sign Flag است.با توجه به تعریفات گذشته راجب فلگها، باید بدانید زمانی که
MSB برابر با 1 است Sign Flag برابر با 1 خواهد بود بدان معنا که اگر نتیجه ما عددی منفی بود این فلگ ست میشود اما اگر MSB صفر بود در نتیجه حاصل عددی مثبت خواهد بود که Sign Flag برابر با 0 است. از آنجایی که اینجا MSB برابر با 1 است لذا Sign Flag هم برابر با 1 خواهد بود.Sign Flag = 1پنجمین فلگ که راجب آن صحبت خواهیم کرد
Parity Flag خواهد بود.برای اینکه بتوانیم این مورد را بهتر مشخص و حل کنیم، باید بدانیم واحدی به اسم Nibble وجود دارد که به معنای این است که هر
4 بیت یک Nibble است. (در عکس مشخص خواهم کرد)ما نیاز به
Nibbles 8 داریم از سمت LSB که بتوانیم PF را مشخص کنیم، اگر 1های موجود زوج (Even) بود فلگ برابر با 1 خواهد بود اما اگر تعداد 1ها برابر فرد (Odd) بود فلگ 0 خواهد بود. (در عکس با ترسیم نشان خواهم داد) در این مورد ما تعداد
4 بیت برابر با 1 داریم بنابراین از آنجایی که تعداد زوج است فلگ Parity Flag برابر با 1 خواهد بود.Parity Flag = 1ششمین فلگ و آخرین فلگ
Auxiliary Flag است که باید آن را مشخص کنیم.در این فلگ با دو مقدار
LSB در هر دو عدد کار داریم، اگر هنگام جمع Carry رخ دهد در نتیجه فلگ AF برابر با 1 خواهد بود و در غیر این صورت فلگ AF را باید 0 قرار دهیم.در این مورد به شکل زیر است مقدار
LSB در هر دو عدد:1
0110 —> 6
1100 —> 12
—————------
10010
همانطور که میبینید در بیت
3ام Carry وجود دارد بنابراین فلگ AF برابر با 1 خواهد بود. (در عکس ترسیم خواهد شد تا به درستی این موضوع را درک کنید)Auxiliary Flag = 1Note:
عکسهای مربوط به ترسیم و نشان دادن هر Flag را به زودی آپلود خواهم کرد.
@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1 1 1
0xDay
(Binary Addition & Show The X86 Flag Registers 5/11) 📌 مشخص کردن رجیستر فلگها (X86 Flag Regiters) اولین فلگ که سعی در مشخص کردنش داریم فلگ 🔤 🔤 است. با توجه به سایر توضیحاتی که قبلا در چنل نوشتم (پست مربوط به فلگها - نگاهی عمیق تر به فلگها) هر فلگ رو…
Please open Telegram to view this post
VIEW IN TELEGRAM
0xDay
(Binary Addition & Show The X86 Flag Registers 6/11) 📌 نحوه تعیین Carry Flag @ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
0xDay
(Binary Addition & Show The X86 Flag Registers 7/11) 📌 نحوه تعیین Overeflow Flag @ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
0xDay
(Binary Addition & Show The X86 Flag Registers 8/11) 📌 نحوه تعیین Sign Flag @ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM