




السمعة:
- إنضم6 مارس 2024
- المشاركات 115
- الحلول 4
- مستوى التفاعل 220
- النقاط 43



والصلاة والسلام على أشرف المرسلين
إحنا هنتعلم إزاي نكتب كود Assembly ونجمعه ونعمل له debugging عشان نفهم كل تعليمات كويس فإحنا محتاجين نفهم بنية ملف Assembly وبعد كده نجمعه ونعمل له debugging هنشتغل على كود بسيط بيقول "Hello World!" خلينا نبدأ ونبص على كود Assembly لـ"!Hello World" ونشرحه جزء جزء.
++++++ الكود مش بيبان هنا فبدل ما اكتبه هاخده سكرين ++++++++
Assembly File Structure
أول حاجة خلينا نبص على طريقة توزيع الكود :
الاتنين .data و .text بيشيروا لأقسام البيانات والنص في الذاكرة اللي التعليمات دي هتتخزن فيها
Directives
كود الأسمبلي بيكون سطر بسطر يعني الملف بيتنفذ سطر سطر وكل سطر فيه تعليمات بنشوف في أول سطر توجيه global _start اللي بيقول للماكينة تبدأ تنفيذ التعليمات اللي بعد ال _start label يعني الماكينة بتروح لل _start label وتبدأ تنفذ التعليمات اللي هناك واللي هتطبع الرسالة على الشاشة ده هنشرحه أكتر في قسم تعليمات التحكمVariables
بعد كده عندنا جزء الـ .data اللي بيكون فيه المتغيرات بتاعتنا عشان يسهل علينا نعرف المتغيرات ونستخدمها أكتر من مرة من غير ما نكتبها كتير لما نشغل البرنامج كل المتغيرات اللي عرفناها هتتحمل في الميموري في الجزء الخاص بالبياناتلما نشغل البرنامج المتغيرات اللي عرفناها هتتحمل في الميموري وتكون جاهزة للاستخدام لما ننادي عليها بعدين هنلاحظ بعدين إننا لما نبدأ ننفذ التعليمات عند الـ _start label هتكون كل المتغيرات بتاعتنا جاهزة في الميموري
نقدر نعرف المتغيرات باستخدام db لقائمة البايتس dw لقائمة الكلمات dd لقائمة الأرقام وهكذا ونقدر نسمي أي متغير عشان نقدر ننادي عليه أو نشير ليه بعدين دي بعض الأمثلة لتعريف المتغيرات
كمان نقدر نستخدم تعليمات الـ equ مع الرمز $ عشان نحسب تعبير زي طول سلسلة نصية عرفناها نقدر نعرف المتغيرات بطريقة ثابتة لكن المتغيرات اللي بنعرفها مع equ بتكون ثوابت ومش ممكن نغيرها بعد كده
على سبيل المثال الكود اللي جاي يعرف متغير وبعدين يعرف ثابت لطوله:
Code
الجزء الثاني والأهم هو قسم .text هذا القسم يحتوي على جميع تعليمات التجميع وبيتم تحميلها في قطاع ذاكرة النص بمجرد ما يتم تحميل كل التعليمات في القطاع النصي يبدأ المعالج في تنفيذها واحدة ورا واحده العادة المتبعة هي إننا بنجط علامة _start في بداية قسم .text وده يعني ان ده هو الكود الرئيسي اللي هيتم تنفيذه أثناء تشغيل البرنامج وكمان هنشوف يمكننا تعريف علامات أخرى داخل قسم .text
قسم النص داخل الذاكرة للقراءة بس يعني مش ممكن نكتب أي متغيرات فيه أما قسم البيانات فهو للقراءة والكتابة علشان كده بنكتب متغيراتنا فيه لكن قسم البيانات في الذاكرة مش قابل للتنفيذ يعني أي كود بنكتبه فيه مش ممكن يتنفذ => الفصل ده جزء من حماية الذاكرة للحد من مشاكل زي الـ buffer overflow وأنواع تانية من استغلال الثغرات
لو حابب تضيف تعليقات استخدم ; في الكود بتاعك .
التعديل الأخير بواسطة المشرف: