21. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[21]
ال داطل ما ٍمكان يف بتخزينها اجلهاز يقوم املتغريات ذذه
Memory
،
.بعد قيام بالتفصيل األماكن ذذه عن سنتكلم
ال أنواع بعض ماييل
variables
:
int (integer values)
float (decimal floating)
char (single character values)
ناُذ
ن
ق
و
م
تغريينُم َعريفتب
a
و
b
َوعيهامن تحديدب مناُقو
(
int
،)
سيكون كالذم أن أي
object
ُهنوع عدد بيستوعل
"
Integer
"
.حيح َ
ص ددَع ،عدَب ُهقرَعن ال
int a, b;
:بسيط مثال نأطذل
int a = 13, b;
float k;
char z = 'A';
k = 3.14;
z = 'w';
b = a + 5;
تغريُم بتعريف ناُذ مناُق
a
الرقم وذو !ًاسبقُم بداطله ما وحددنا
13
..
آطر تغريُم ددنا َح مُث
b
نوعه ،
"
صحيح عدد
"
نولك
هلداطب حويهَي َ
س ما ُحددن َمل
..
آطر تغريُم قنارَع مُث
k
نوعه
"
عرشي عدد
"
آطر متغري ثم ،
z
بد سيحوي
اطله
ذو واحد حرف
A
..
املتغري داطل وضعها نود التي القيمة حددنا وبعدذا
k
وذي
3.14
..
تغريُللم تغيري بإجراء مناُق مُث
z
احلرف وذو ،بداطله ما استبدلنا حيث جديد من
A
..
ذو ،آطر حرف منه ًالبد ووضعنا
w
..
أطربنا ًاأطري مُث
صديقنا
تغريُملا
b
قيم داطله ن ِّخزُي َ
س ُهأن
املتغري ة
a
وذي
13
عدد عليها ًازائد
5
..
22. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[22]
قيمة ستكون وبالتايل
b
النهاية يف
18
.
ال بعض لتوضيح اآلن سننتقل
Operators
.همةُملا
Arithmetic Operators
Operation Symbol Example
Addition + b = a + 5
Subtraction - b = a - 5
Multiplication * b = a * 5
Division / b = a / 5
Modulo reduction % b = a % 5
ال توضيحب نقوم َ
س
"
Mod
"
تغريُم ضَفرنل ،ثالَمكو ،ةَسمالق عملية لجراء بعد تبقيةُملا القيمة وذو
a=13
وأردنا
عىل القسمة
5
الناتج قيكون
2
الرقم من ويتبقى
13
ذي ..قيمة ذذه سمةالق عملية بعد
(
3
.)
(13%5 = 3)
االطتصارات بعض أيضا نستخدم
(Shorthand Expressions)
ال دالة يف املستخدمة تلك مثل الدوال بعض يف
For
ًادوم
i++
.
Full Expression Shorthand Explanation
i = i + 1 i++ or ++i Add 1 to the variable
i = i - 1 i-- or --i Subtract 1 from the variable
ال مع القاتَعال ذهَذ استخدام متَي ماَندوع
Arithmetic Operators
قتخت
ل ًاتبع النواتج لف
ستخدمُملا االطتصار نوع
.
23. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[23]
مثال
:
int a, b;
a = 5;
b = a++ * 6;
نم ًالك سيحوي ماذا
a
و
b
؟
:كالتايل الناتج سيكون ..نعم
b = 30
a = 6
ملاذا؟
ألن
a++
بإضاقة الربنامج ربُخن أننا تعني
1
املتغري قيمة لاىل
a
ولكن
"
بعد
"
العم لمتام
ل
احلسابية ية
!
.
:آطر ثالم لنستعرض
int a, b;
a = 5;
b = ++a * 6;
تغريُملا يمةق تزداد َ
س ُهأن عنيَي وذذا
a
"
قبل
"
:!الرضب مليةَع لجراء
a = a + 1;
b = a * 6;
قيمة تكون وبالتايل
b
النهاية يف
=
36
،
ويكون
(
a = 6
)
عيُم قيمة لضاقة اإلطتصار من كنوع ًاأيض ُنانمكُي.. ،رائع ذذا
بالناتج واإلحتفاظ اجلمع بإجراء قيقوم ،ما ٍتغريُمل نة
.األكواد يف ًاكثري استخدامها يتم ،!الوقت نفس يف بداطله النهائي
24. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[24]
Full Expression Shorthand Explanation
i = i + 12 i+=12 Add some value to the variable.
i = i - 12 i-=12 Subtract some value from the variable.
i = i * 12 i*=12 Multiply some value by the variable.
i = i / 12 i/=12 Divide some value from the variable.
Comparison Operators
Condition Symbol Example
Less than < (a < b)
Greater than > (a > b)
Less than or
equal to <= (a <= b)
Greater than or
equal to >= (a >= b)
Equal to == (a == b)
Not equal to != (a != b)
ناولَق عند
(a = 5)
،املثال سبيل عىل
..َعنين َُحننَق
ع َ
ض
قيمة
5
ُملا داطل
تغري
a
..
نكتب عندما بينام
(a = = 5)
قنحن ،
تغريُملا لهام َ
حي التي القيمة من قُقََحتال الربنامج من نطلب
a
كانت لذا ما
5
.ال أم
ذناك
symbol
استخدامه مكنُي آطر
ال قبل فردهُمب
condition
ال وذو
)!(
ويعني
"
Not
"
:كامييل
!(a < b) is equivalent to (a >= b)
ال مزي َرب مهتامخب ونقوم
AND
وال
OR
:
Logic Symbol Example
OR || ((a < b) || (a < c))
AND && ((a < b) && !(a < c))
27. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[27]
Function Turn (variable_direction)
{
Activate the variable_direction blinker;
Slow down;
Check for oncoming traffic;
while (there is oncoming traffic)
{
Stop;
Watch for oncoming traffic;
}
Turn the steering wheel to the variable_direction;
while (turn is not complete)
{
if(speed < 5 mph)
Accelerate;
}
Turn the steering wheel back to the original position;
Turn off the variable_direction blinker;
}
األ سوَقال أن ظالح
)(اخلارجي ول
بينهام تَمت األحداث ومجيع ،النهاية يف وغلقه البداية يف تحهَق َمت
..
دالة َخدمناتاس
While
احل لىل طولُالد مَدَع ط َ
رش ع َ
َضنل
ةَمحَدزُم اَوهنك حالة يف ارة
..
،كذلك ُنكَت َمل قإن
ال لنتقَي َ
سَق
pointer
ال لىل
Instruction
ال
ُهَركت (تم رادُملا اإلجتاه لىل ودقامل دوران وذي تالية
السيار أن وذو آطر ط َ
رش عنا َ
ضَو مُث ،)تغريُكم
ة
ِسع عىل تكون أن دُبال نفسها
ة
واالندما بالدوران للقيام كاقية
ج
ًامع دالتني قاستخدمنا باحلارة
..
Whlie
دالة وداطلها
if
..
الس دَقوم ُعيدنل مُنهم جنا َر َ
ط مُث
يار
ة
ئُطفنو الطبيعي هضعَول
اإلشار صباحم
ة
ال من روجُخلا مُث ،
Function
.ًاأطري
28. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[28]
ال غةُل يف
C
لل استدعاء ثُحيد
Function
َمقا نَمل أو ناَل ما ٍقيمة أو جنات إرجاعب تقوم أن اّمل ،هالَمَع أداء َعدَبو ،
هاباستدعائ
(
(functions can return a value to a caller
يشء لنا عُرجت ال بامُور
!
،
و
ال عىل قُطلن
function
التي
بال عملها انتهاء بعد قيمة لنا عُرجت ال
.void( )
ال لرجاع حالة يف أما
function
اإلشارةب َقومن هالَمَع انتهاء َعدَب قيمة
ال قيه ع َ
تض َ
س الذي تغريُملا لىل
function
ال ذذا
return value
،
ال توضيح َعَم
Data type
..هب اخلاص
ذلك؟ كيف
س ..ًاحسن
نرشح
ذذا
ب
ثالم
:
ماييل
function
اسمها
factorial( )
ِّ
تغريُملا عىل رياضية عملية إلجراء باستدعائها نقوم
a
،
لنا عج ُ
سرت انتهائها وبعد
َغريتُملا يف بوضعها تقوم قيمة
b
.
int a=5, b;
b = factorial(a);
ب الكود ذذا يف َقومن
بنوع تغريينُم َعريفت
int
املتغري أطربنا مُث ،
b
قيمة سيحوي ُهأن
،
بالطبع ستكون
int
،
أن يعني وذذا
ال
return value
ال من القادم
factorial( )
نوعه سيكون
integer
.
تغريُملا قيمة ووضعنا
a
"
بخمسة
"
،
سيكون
(a)
ال ذو ناُذ
Argument
ال ذذه لىل ُهلمرار متَي الذي
function
،
الرقم لُدطنس أننا بمعنى
5
يةساباحل ليةَمَعال إلجراء
تغريُملا يف جالنات ع َ
َضن مُث ليهَع
b
.
ال َيذاذ
factorial( )
:هاباستدعائ مناُق التي
29. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[29]
int factorial (int x)
{
int i;
for (i=1; i < x; i++)
x *= i;
return x;
}
قيمة أن ظالح
x
لل ًاتبع تركها َمت
حالتنا يف وذو ل َ
دطُملا رقم
5
ال ديد َ
حت َمتو ،
data type
أنه
integer
.
النهاية يف
تغريُملا سيحوي
b
ذي قيمة
(
5*4*3*2*1 = 120
.)
ليةَمَع مَتت كيف بالتفصيل لك سأرشح
"
ال استدعاء
function
"
يف
الثالث الباب
.اهلل بإذن
ال أن ركََذت
Function
يق ناَل عُرجت ال التي
م
ة
عينةُم
"
return value
"
بال ققط ما ٍوظيفةب تقومل َستدعيهان التي َيوذ ،
"
Void Function
"
.
ال استدعينا أننا الحظ ،املايض السيارة يادةقب اخلاص ثالللم ئناج لذا
Function( )
_
Turn
لتقوم
ظاربانت لسنا قنحن ،ققط للحارة الدطول بعملية
return value
،نهام
ألننا
ال من جمموعة تنفيذ دََون ققط
instructions
رَم كل تهمَبتالك االضطرار بدون
ة
.!حارة يأل الدطول قبل
ثالامل ذاَِب مَختن َ
س
ققرة
ال
functions
:
void turn (variable_direction, target_street_name)
{
Look for a street sign;
current_intersection_name = read street sign name;
while (current_intersection_name != target_street_name)
{
Look for another street sign;
current_intersection_name = read street sign name;
}
Activate the variable_direction blinker;
Slow down;
30. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[30]
Check for oncoming traffic;
while (there is oncoming traffic)
{
Stop;
Watch for oncoming traffic;
}
Turn the steering wheel to the variable_direction;
while(turn is not complete)
{
if(speed < 5 mph)
Accelerate;
}
Turn the steering wheel right back to the original position;
Turn off the variable_direction blinker;
}
ال تكون ولكي
Function
واقعية أكثر
..
لضاقة َمت
“Argument”
ِّ
تغريُم أو
"
target_street_name
"
اسم وذو
ال
،لليه ماجاإلند اد َرُملا عشار
ال بجانب
Argument
األول
"
variable_direction
."
هذَذ نم اإلستفادة قِّقُحنس واآلن
ال
function
للسيار جَمرناَب ُبتَكن بأن
ة
ال َدعيتَسن مُث
function
.بناسُملا قتَالو يف
Begin going East on Main Street;
if (street is blocked)
{
Turn (right, 15th Street);
Turn (left, Pine Street);
Turn (right, 16th Street);
}
else
Turn (right, 16th Street);
Turn (left, Destination Road);
for (i=0; i<5; i++)
31. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[31]
Drive straight for 1 mile;
Stop at 740 Destination Road;
باستدعاء مناُق َأين َ
ظت َالح ذل
Turn( )
؟
.
ال بإمرار أيضا مناُق
Arguments
ال مكان نهمم ُلك ضعَو تمَيل لليها
variable
،املطلوب وتنفيذ له رناظُملا
ننتظر ولن
return value
ألهنا نهام
“void function”
.
.ديد َج نم ةَ َجم َ
الرب لىل َعودن مُث ًالقلي تلف ُ
ُم موضوع لىل اآلن سننتقل
.
ال عضَب عىل سنتعرف
Registers
التي
ال مهاستخدَي
CPU
. الربامج مع لهُمتعا أثناء
x86 Processor
بال تعلقةُملا األمور بعض ُشاذدنل قصري قاصل نأطذ َ
س
x86 processor
َنل
عىل تعرف
َيك
فية
ت
ال لَمعا
CPU
ال مع
Compiled Program
.
.
ال كَلتمَي
Processor
جمموع
ة
ال من
Registers
..
قهو
ك مهمَخدتسَي
internal variables
ُي
ختلفُملا هامهَم إلمتام دقيق بشكل فهمِّظو
ة
.
بال نعني ماذا ولكن ،نعم
Register
؟..
ال داطل صغرية ختزين مساحة لهنا
CPU
ال مع والتعامل للوصول يستخدمها طريقة أِسع ُعدتو
Data
.
A small amount of storage on the CPU and is the fastest method for a CPU to access data.
40. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[40]
Signed and Unsigned
ال عن نتحدث عندما
numerical values
ال يف ختزينها يتم التي األعداد نعني قنحن
memory
الثنائي بالنظام
،
تكون أن لما وذي
Signed
(موجب أي
ة
أو ،)سالبة أو
Unsigned
(موجب أي
ة
.)ققط
:كالتايل تغريُملا ذذا بتعريف نقوم
“unsigned int”
ساحبامل ُّمكََحتال مكنناُي ًاأيض ،
ة
َ
صصَخُملا
ة
ال ذاهل
Numerical variable
بالزياد ًءسوا
ة
ُقصاننبال أو
بإضاقة وذلك
short or long
.بلهَق
توجد
function
ال لغة يف
C
تسمى
sizeof( )
..
أي مساحة حتديد وظيفتها
data type
.نريده
ال ذذه ب ُِّجرنل
function
همُملا تغرياتُملا بعض مساحة عىل فنتعر كي
ة
:
#include <stdio.h>
int main() {
printf("The 'int' data type istt %d bytesn",
sizeof(int));
printf("The 'unsigned int' data type ist %d bytesn",
sizeof(unsigned int));
printf("The 'short int' data type ist %d bytesn",
sizeof(short int));
printf("The 'long int' data type ist %d bytesn",
sizeof(long int));
printf("The 'long long int' data type is %d bytesn",
sizeof(long long int));
printf("The 'float' data type ist %d bytesn",
sizeof(float));
printf("The 'char' data type istt %d bytesn",
sizeof(char));
}
استخدمنا أننا معي الحظ
printf( )
الشاش عىل ما يشء بطباعة لتقوم
ة
:
41. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[41]
بال يسمى ما استخدمنا لقد
format specifier
وذي
%d
:ييل كام العرض بعملية لتقوم
ال مساحة بعرض الكود ذذا سيقوم
data types
ال
موضح ذو كام له بإدطاهلا قمنا تي
.
reader@hacking:~/booksrc $ gcc datatype_sizes.c
reader@hacking:~/booksrc $ ./a.out
The 'int' data type is 4 bytes
The 'unsigned int' data type is 4 bytes
The 'short int' data type is 2 bytes
The 'long int' data type is 4 bytes
The 'long long int' data type is 8 bytes
The 'float' data type is 4 bytes
The 'char' data type is 1 bytes
reader@hacking:~/booksrc $
Pointers
ال أن ركََذت
(
EIP register
)
نَع بارةع َيذ
pointer
ال لىل شريُي
current instruction
وذلك الربنامج لَمَع أثناء
ال عىل الحتوائها
memory address
ال هذَِب اخلاص
instruction
.
ال َعَم لُمَعاتال أثناء
memory
التي للبيانات ّسخنال لياتَمَعل باستمرار َحتاجن
ال بواسطة استخدامها متَي
functions
،
ال داطل البيانات نسخ تكرار ةَمكاحل َنم قليس وبالتايل
memory
لكل
function
حجز يتطلب ألنه ،نستدعيها
ال مساحة
destination
ال نسخ سيتم (التي
data
ال يف )لليها
memory
األمر كونَي َ
س .!ّسخنال ليةَمَعب البدء قبل
لل ًاكهلُم
memory
.!هلا ًاومستهلك
ال استخدام مكنناُي ذلك من ًالبد
pointer
ّر ُح ُلكب به لنتحرك
ي
ة
داطل
ال
memory
اإلشار طريق عن
ة
لىل
ال عناوين
blocks
.
We use pointers to point to the address of the beginning of that block of memory.
Pointers are 32 bits in size (4 bytes), and is defining by putting (*) to the variable name.
42. اإللكترونيالقرصنة
ة
وأ
المعلوماتمن
Understanding Hacking and Information Security
Programming
[42]
:مثال نأطذ دعنا
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20]; // A 20-element character array
char *pointer; // A pointer, meant for a character array
char *pointer2; // another one
strcpy(str_a, "Hello, world!n");
pointer = str_a; // Set the first pointer to the start of the array.
printf(pointer);
pointer2 = pointer + 2; // Set the second one 2 bytes further in.
printf(pointer2); // Print it.
strcpy(pointer2, "y you guys!n"); // Copy into that spot.
printf(pointer); // Print again.
}
ماييل
:الكود ذذا نتائج
reader@hacking:~/booksrc $ gcc -o pointer pointer.c
reader@hacking:~/booksrc $ ./pointer
Hello, world!
llo, world!
Hey you guys!
reader@hacking:~/booksrc $