مضى على الشبكة و يوم من العطاء.

[5] Assembly File Structure

BEN10

./عضو نشيط
.:: كاتب تقني ::.

السمعة:

🌴بسم الله الرحمن الرحيم الحمد لله رب العالمين 🌴 🍃

والصلاة والسلام على أشرف المرسلين

إحنا هنتعلم إزاي نكتب كود Assembly ونجمعه ونعمل له debugging عشان نفهم كل تعليمات كويس فإحنا محتاجين نفهم بنية ملف Assembly وبعد كده نجمعه ونعمل له debugging هنشتغل على كود بسيط بيقول "Hello World!" خلينا نبدأ ونبص على كود Assembly لـ"!Hello World" ونشرحه جزء جزء.

++++++ الكود مش بيبان هنا فبدل ما اكتبه هاخده سكرين ++++++++

1728534712362.webp



Assembly File Structure


أول حاجة خلينا نبص على طريقة توزيع الكود :

1728535264587.webp


الاتنين .data و .text بيشيروا لأقسام البيانات والنص في الذاكرة اللي التعليمات دي هتتخزن فيها




Directives

كود الأسمبلي بيكون سطر بسطر يعني الملف بيتنفذ سطر سطر وكل سطر فيه تعليمات بنشوف في أول سطر توجيه global _start اللي بيقول للماكينة تبدأ تنفيذ التعليمات اللي بعد ال _start label يعني الماكينة بتروح لل _start label وتبدأ تنفذ التعليمات اللي هناك واللي هتطبع الرسالة على الشاشة ده هنشرحه أكتر في قسم تعليمات التحكم

Variables

بعد كده عندنا جزء الـ .data اللي بيكون فيه المتغيرات بتاعتنا عشان يسهل علينا نعرف المتغيرات ونستخدمها أكتر من مرة من غير ما نكتبها كتير لما نشغل البرنامج كل المتغيرات اللي عرفناها هتتحمل في الميموري في الجزء الخاص بالبيانات

لما نشغل البرنامج المتغيرات اللي عرفناها هتتحمل في الميموري وتكون جاهزة للاستخدام لما ننادي عليها بعدين هنلاحظ بعدين إننا لما نبدأ ننفذ التعليمات عند الـ _start label هتكون كل المتغيرات بتاعتنا جاهزة في الميموري

نقدر نعرف المتغيرات باستخدام db لقائمة البايتس dw لقائمة الكلمات dd لقائمة الأرقام وهكذا ونقدر نسمي أي متغير عشان نقدر ننادي عليه أو نشير ليه بعدين دي بعض الأمثلة لتعريف المتغيرات

1728535516979.webp

كمان نقدر نستخدم تعليمات الـ equ مع الرمز $ عشان نحسب تعبير زي طول سلسلة نصية عرفناها نقدر نعرف المتغيرات بطريقة ثابتة لكن المتغيرات اللي بنعرفها مع equ بتكون ثوابت ومش ممكن نغيرها بعد كده


على سبيل المثال الكود اللي جاي يعرف متغير وبعدين يعرف ثابت لطوله:
1728535597021.webp



Code

الجزء الثاني والأهم هو قسم .text هذا القسم يحتوي على جميع تعليمات التجميع وبيتم تحميلها في قطاع ذاكرة النص بمجرد ما يتم تحميل كل التعليمات في القطاع النصي يبدأ المعالج في تنفيذها واحدة ورا واحده

العادة المتبعة هي إننا بنجط علامة _start في بداية قسم .text وده يعني ان ده هو الكود الرئيسي اللي هيتم تنفيذه أثناء تشغيل البرنامج وكمان هنشوف يمكننا تعريف علامات أخرى داخل قسم .text

قسم النص داخل الذاكرة للقراءة بس يعني مش ممكن نكتب أي متغيرات فيه أما قسم البيانات فهو للقراءة والكتابة علشان كده بنكتب متغيراتنا فيه لكن قسم البيانات في الذاكرة مش قابل للتنفيذ يعني أي كود بنكتبه فيه مش ممكن يتنفذ => الفصل ده جزء من حماية الذاكرة للحد من مشاكل زي الـ buffer overflow وأنواع تانية من استغلال الثغرات


لو حابب تضيف تعليقات استخدم ; في الكود بتاعك .

 
التعديل الأخير بواسطة المشرف:
اشكرك مواضيعك مفيده اترك النقاش وستمر بالـ Assembly

ننتظر جديدك
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى