الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم كيف تعمل مترجمات لغات البرمجه

رائج
بدأه JAAS في 23 يونيو 2004 · 33 رد · 30,409 مشاهدة · في المواضيع المميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مترجمات لغات البرمجه إسم يدل على الغموض

تنقسم المترجمات إلى عده أنواع منها

مترجمات البرامج القياسيه : مثل فيجول سي بورلند سي الدلفي وغيرها

مترجمات مباشره : مثل لغه بيرل و php و باقي سكربتات الويب

مترجمات مباشره مشفره : مثل الجافا

المترجمات القياسيه:

تصميم المترجمات لا يعتمد على اللغه المصمم بها مثل ما سمعت من بعض الأخوة في المنتدى

قد يصمم بأي لغه قياسيه مثلا مترجم الجافا الخاص بوندوزلا تستبعد إنه مصمم بالفيجول سي وغيره

والمسأله الثانيه أنه لكل نظام مترجم خاص

لنبدأ بدراسه المترجمات على نظام وندوز

قبل كل شيء ماذا نريد أن نكتب ملف تنفيذي الملف التنفيذي وملف الفيديو والصور وأغلب الملفات لها مقدمه وقواعد

مقدمه الملف التنفيذي

نبدأ من أول بايت في الملف التنفيذي

ملاحظه كل الإزاحات بالرقم الست عشري

أول ما يبدأ الملف التنفيذي يبدأ بحرفين يدل على نوعه

00: MZ

---------------------------------

من البايت الثالث تبدأ تروسه الدوس

02: عدد البايتات في آخر بلوك البلوك مكون من 512 بايت

04: مجموع عدد البلوكات في الملف التنفيذي

ملاحظه القيمه الأولى ضرب القيمه الثانيه يساوي حجم الملف التنفيذي

06: عدد مداخل الكتل الذاكريه المتحركه أو المتنقله

08: حجم ترويسه الفقره

0A: الحد الأدنى من الفقرات في الملف التنفيذي

0C: الحد الأعلى من الفقرات في الملف التنفيذي

0E: قيمه المكدس SS

10:قيمه دليل المكدس SP

12: مدقق المقارنه

14: قيمه دليل الكود CS:IP

16: بدابه عناوين الكتل الذاكريه المتنقله

18: علامه تدل على بدايه كتله ذاكريه

1A: قيمه هذه الكلمه دائما صفر لتدل على بدايه البرنامج من الداله الرئيسيه

/////////////

هذه المقدمه غير مهمه في برامج ال32 بت لأن البرنامج ما يستخدم أي قيمه منها تحب تجرب إحذف

كل الترويسه من أي برنامج 32 بت وشغله بيشتغل بدون ما يتغير فيه ولا شي

بعد ما تخلص ترويسه الدوس يجي بعدها تواقيع مثل هذا البرنامج لا يعمل في دوس

بعد ما تخلص التواقيع تبدأ ترويسه برامج 32 بت ويجب أن تقع علامه بدايتها في أول 512 بايت والعلامه هي PE

00:علامه بدايه تروسه البرنامج مكونه من 4 بايت

04:نوع الآله التي يعمل عليها البرنامج

06: عدد الأقسام في البرنامج قسم الكود وقسم البيانات وهكذا

08: وقت إنشاء البرنامج

0C: مؤشر إلى جدول الرموز الرموز تستخدم في التنقيح ولا تستخدم في البرنامج النهائي

10: عدد الرموز

14: حجم ترويسه الملف غير متضمنه حجم الأقسام وهي متساويه في كل البرامج

16:خصائص البرنامج

18:نوع ترويسه الملف

1A:رقم إصدار الرابط النهائي

1B:رقم إصدار الرابط الأولي أو التجريبي يساوي 0

1C:حجم قسم الكود في البرنامج التنفيذي

20: حجم قسم البيانات للبرنامج

ملاحظه بعض المترجمات تعتبر كل الأقسام بيانات وتكون القيمه هنا الحجم الوهمي لكل الأقسام

بعضها لا يعتبر قسم الكود بيانات وتكون القيمه هنا الحجم الوهمي لكل الأقسام عدى قسم الكود

24:حجم قسم البيانات الغير متغير

28: عنوان بدايه تنفيذ البرنامج

2C:عنوان بدايه قسم الكود

30: عنوان بدايه قسم البيانات

34: عنوان البرنامج في الذاكره

ملاحظه بعد ما يشتغل البرنامج وينقل إلى الذاكره كل العنواين مثل عنوان بدايه البرنامج وعناوين الأقسام

يضاف إليها عناون البرنامج في الذاكره وهو عنوان وهمي

38: يحتوي إزاحه أول قسم في البرنامج وعاده يكون قسم الكود والفائده ترتيب أقسام البرنامج

3C: يحتوي على تنسيق الأقسام والفرق بين حجم القسم الفعلي والوهمي ولذلك سيتم شرحها مع الأقسام

3E:إصدار نظام التشغيل النهائي

40: إصدار نظام التشغيل الأولي

ملاحظه أي إصدار أولي أو تجريبي يساوي صفر

42: إصدار العنوان الوهمي للبرنامج راجع الإزاحه 34 وغالبا يساوي إصدار نظام التشغيل

44: الإصدار الأولي للعنوان يساوي 0

46: إصدار النظام الفرعي النهائي يساوي إصدار نظام التشغيل

48: الإصدار الأولي للنظام الفرعي يساوي 0

4A: محجوز للنظام

4E:حجم عنوان البرنامج يساوي العنوان الفعلي لآخر قسم +حجم القسم الفعلي

52: حجم كل الترويسات بمعنى أول مايبدأ شفره البرنامج بعد الترويسه

56:مدقق المقارنه

5A: خصائص إظهار البرنامج برنامج رسومي أو كونسل مثل الدوس ولكن 32 بت

5C: خصائص ربط المكاتب بالثريد أو العمليه

5E:الحجم الإفتراضي للمكدس وهو دائما يساوي واحد ميجابايت

62: الحجم الحالي للمكدس

66: الحجم الإفتراضي للكومه وهو دائما يساوي واحد ميجا

6A: الحجم الحالي للكومه

ملاحظه كل الأربع الأحجام للمكدس والكومه متشابهه في كل البرامج إذا لم يغيرها المبرمج نفسه

وستفهم هذه القاعده لاحقا

6E: أعلام لمشغل البرنامج وهذا أعتقد إنه ما يخص البرامج العاديه دائما صفر

72:القيمه الإفتراضيه لعناوين وأحجام الأقسام الفعليه في كل المترجمات يساوي 16 أي 10 بالهيكس

وهو أن لكل قسم عنوان فعلي واحد وحجم فعلي واحد عدد الأقسام ضرب 2 قد يكون عدد الأقسام

أكبر مافي مشكله إعرف إنها مو كلها فعليه

76: عنوان جدول الدوال المصدره من الملف

7A: حجم جدول الدول المصدره

7E: عنوان جدول الدوال المستورده للملف

82: حجم جدول الدوال المستورده

86: عنوان جدول مصادر الملف الأيقونات والنوافذ وغيرها

8A: حجم جدول مصادر الملف

ملاحظه هذه الثلاث جداول لها قواعد وترويسه سيتم شرحها إن شاء الله

8E: عنوان جدول الإستثناءات والأخطاء في البرنامج

92: حجم جدول الإستثناءات

96: عنوان جدول توقيع البرنامج

9A: حجم جدول توقيع البرنامج

هذه الجداول ما أدري متى بتكون مستخدمه يمكن في المستقبل

إلى الآن القيمه الإفتراضيه لهذه الجداول 0

9E: عنوان جدول الكتل الذاكريه المتنقله

A2: حجم جدول الكتل

A6: عنوان بيانات تصحيح البرنامج غير مستخدم في البرنامج النهائي

AA: حجم البيانات

AE: عنوان بيانات تصميم وبنيه البرنامج

B2: حجم البيانات

B6: عنوان جدول المؤشرات العامه

BA: حجم الجدول

BE: محجوز للنظام

C2: عنوان مخزن خيوط البرنامج المحليه

C6: حجم الجدول

CA: عنوان جدول تشكيله البرنامج

CE: حجم الجدول

D2: عنوان تحديد جدول إستيراد الدوال

D6: حجم الجدول

DA: جدول العناوين لعناوين الإستيراد

DE: حجم الجدول

E2: جدول تأجيل إستيراد الدوال

E6: حجم الجدول

EA: عناون بدايه ملفات التشغيل لتقنيه الكوم

أعتقد إنها تقنيه لبرامج خوادم المواقع لشركه مايكروسفت

EE: حجم جدول الإستيراد

F2: محجوز للنظام

F4: محجوز للنظام

بعد ذلك يبدأ تنسيق الأقسام وكلها نفس القاعده

0-7: إسم القسم وحجمه 8 بايتات

0B: الحجم الفعلي للقسم

0F: العنوان الفعلي للقسم

13: الحجم الوهمي للقسم

17:العنوان الوهمي للقسم

الحين القصد من ورى هذا الفصل بين الأقسام لو تفتح أي برنامج

بمحرر هكس من بدايه البرنامج ستلاحظ قسم الكود وبعده فراغ

وبعدين القسم الأول من البيانات وبعده فراغ هذه الفراغات للتقسيم

ولهذا فإن الحجم الفعلي للقسم يساوي القسم بدون الفراغ والحجم الوهمي يساوي القسم زائد الفراغ

1B:مؤشر إلى عنوان التحريك للقسم

1F:مؤشر إلى رقم السطر

23:رقم النقل للقسم

25:عدد الأسطر

هذه المعلومات خاصه للتبديل بين الأقسام

القيمه الإفتراضيه صفر

27:خصائص القسم قسم شفره أو بيانات أو قسم متحرك و للكتابه أو غيره

وهكذا مع كل الأقسام

==========================

إنتهينا من كتابه مقدمه الملف قبل أن نبدأ في معرفه كيف يقوم المترجم بكتابتها يجب أن نتعرف على بقيه القواعد

قواعد الدوال المستورده :

لفهم هذه التقسيمات لازم نطبق على مثال أفتح أي برنامج بمحرر هيكس دون أن تشغل البرنامج

إستخرج من الملف عنوان جدول الدوال المستورده ولنفرض أن العنوان

4484

توجه مباشره للعناون ماذا تلاحظ مجموعه من الأرقام كما هو في الصوره

ccmmp.gif

قبل أن تكمل إختر أو علم على أول 20 بايت لاحظ من بدايه هذا العنوان كل 20 بايت مختصين في

داله ربط يستورد منها البرنامج لمعرفه ماهي مكتبه الربط لا حظ اللون الأحمر رقم 1 القيمه

22460000

هذا ما تراه لكن المعالج قبل ما يستعملها يقلب كل بايتين هذا قانون لا زم تكون حافظه فتصبح

00004622

إذهب للعنوان ماذا تلاحظ إسم مكتبه الربط Kernel32.dll

نرجع لأول عشرين بايت على اللون الأخضر إعكس الرقم بياخذك لعنوان

هذا العنوان يحتوي على سلسله من العناوين كل عنوان بعد ما تقلبه يؤشر إلى داله مستورده من نفس المكتبه

تتبع اللون الأخضر وشوف

بقي أهم شيء اللون الأزرق اللون الأزرق يحتوي على نفس ما يحتويه اللون الأخضر في المرحله

الثانيه رقم تعكسه يوديك لأسم الداله وهو النظام المتبع في كل المترجمات أما اللون الأخضر فقط

في مترجمات مايكروسفت

بمعنى أن النظام لو ما لقي في البرنامج أول أربع بايتات من العشرين بايت مافي مشكله

بيدور في آخر أربع بايتات الطريقه المتبعه لمترجمات بورلند

إما 8 بايتات التي في الوسط خاصه بوندوز 98 ومي ويكتب فيها النظام عناوين خاصه

خارجه عن موضوعنا الحين خلنا في المترجمات

ملخص سريع لهذه المرحله

يقوم المترجم بالبحث عن الدوال المستخدمه في البرنامج بعد ما يجمعها يكتب في

ترويسه البرنامج عنوان الإستيراد يكتب في هذا العنوان لكل مكتبه مستورد منها يكتب عشرين بايت

وأهم شي يكتب آخر 8 بايتات وهي عنوان يدل على إسم المكتبه ومؤشر لجدول عناوين الدوال

بعد ما يكتب كل المكاتب بهذه الطريقه يكتب 20 بايت 000 ليدل على إنتها الجدول

كيف يفهمه نظام التشغيل جرب شغل الملف التنفيذي وإذهب إلى عناوين الدوال بتلاقيها

تغيرت إستبدلها النظام بعنوان الداله في الذاكره كيف عرفها ؟؟ سهله إذا إستخرج إسم الداله يستدعي هذه الداله

GetProcAddress

/////////////////////////////////////////////////////

قواعد الدوال المصدره :

أعتقد إنا بدينا نفهم كيف ينسق نظام التشغيل . الحين دور على برنامج

يصدر دوال أو مكتبه ربط وإستخرج عنوان جدول التصدير وإذهب إليه .ملاحظه إذا كان البرنامج يعمل

أضف إلى العنوان الذي إستخرجته عنوان البرنامج الوهمي مثلا ImageBase = 77E60000

شو رايك تحاول تستخرجها لوحدك كذا تضمن إنك ما تنسا القواعد

وتتعلم كيف تكتشف أشيا جديده

بعطيك بعض المساعدات ترويسه جدول الملفات المصدره

يقع أول 45 بايت كل أربع بايتات تدل على شيء منها عدد الدوال المصدره

عناوينها أرقامها وأسمائها

أتمنى أكون حققت بعض الفائده من هذا

الدرس ملاحظه الدرس بعده ما خلص هذه قواعد ومن ثما بنبدأ في

الغوص في أعماق المترجمات يمكن ربك يفرجها ويطلع واحد يصمم مترجم للغه عربيه أو نظام

صدقوني الشغله سهله بس تريد مجموعه مبرمجين ما يكفي واحد

ومع السلامه

/////

تم تعديل هذه المشاركة بواسطة jaas في 13 أبريل 2005 في 00:40

2

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#2

شكر iaas اياس على هذا الموضوع وعلى الشرح الجميل وعلى الاهتمام .

لي ملاحظة حول اهمية ترويسة او مقدمة الدوس وكما قلت اول بايت يشير الى توقيع او علامة الملف التنفيذي mz .

ولكني لست متاكد بامكانية حذف هذة المقدمة حيث يحتوي تقريبا اخر بايت على مؤشر او عنوان الى ترويسة pe والتي يحتاجها win loader لكي يتمكن من الحصول على المعلومات الخاصة ببنية الملف مثل حجم الشفرة, ... , حتى يستطيع تحميلها الى الذاكرة.

ارجو الاستمرار في موضوع المترجمات تراني جديد على هذا الموضوع وكما قلت الموضوع يحتاج الى تعاون بعض المبرمجين.

مع السلامة

#3

السلام عليكم,

لا أضن أن الأخ jaas يقصد بالحذف إزالة كل هذه البايتات من الملف بل يمكن أن نغير قيمتها كما نشاء دون أن يشكل تغيير في البرنامج.

أما الحذف التام فسيسبب بعض المشاكل التالية :

بما أن الأوفسيت 3c يحتوي على بداية Pe Header فإذا قمنا بالحذف - إزالتها - فإن قيمة هذا الأوفسيت ستتغير بلا شك وهذا سيعطينا قيمة غير حقيقية للترويسة.

إذا قمنا بالحذف فإن أوفسيت الملف كلها ستنقص بالعدد الذي تم حذفه وهذا قد يسبب مشكلة مثلا على مختلف Sections فهذه الأخيرة قد لا تكون تدل على الأرقام الصحيحة الخاصة بها.

وكذلك مشكل الحذف قد يِؤثر على الكود إذا كان هناك مشكل Relocatable .

إلى اللقاء.

#4

هذا المطلوب الإستفسار عن كل شيء

بالنسبه للأخ

naz

كتبت في الموضوع يمكن حذف الترويسه لأن البرنامج لا يستخدمها

أقصد بالمسجلات مثل مسجل ip و sp أي أن كل المعلومات المكتوبه في هذا القسم

16 بت

أما بالنسبه لأول بايتين توقيع البرنامج أكيد لازم تكون موجوده

جرب صفر كل ترويسه الدوس عدى mz

وشغل البرنامج شوف النتيجه النظام بيدور على بدايه pe في أول 512 بايت

وهذا ما وضحه المشرف.

-----------------------------------------

تكمله الشرح

جاهزين اليوم ؟؟

نكمل باقي القواعد

قواعد جدول المصادر:

في البدايه شغل أي برنامج بمحرر هكس إستخرج عنوان جدول المصادر (الأيقونات - الصور ..)

ولنفرض أن العنوان

8000 + العناون الوهمي 400000 إذا كان البرنامج يعمل

=408000

إذهب للعنوان ماذا تلا حظ :

less2cmp.gif

لاحظ في الملف التنفيذي مكتوب مثل النافذه الي على اليسار

كيف يستخرج البرنامج مصادر الملف وأظهرها في النافذه الي على اليمين هذا درسنا

أول عنوان تشوفه في أعلى الصفحه إلي معلم عليه يساوي

00000800

الكلمه الأقل مرتبه إذا قلبتها بعطيك

0008

هذا الرقم يمثل عدد الأنواع في ملف المصادر بمعنى أيقونه نوع صوره نوع مؤشر نوع وهكذا وليس عدد

ما يحتويه ملف المصادر

بعد الرقم هذا كل 8 بتات تمثل نوع وعنوان فرعي لمحتواه إنظر اللون الأحمر رقم 1

02000000

بعد ما نعكسه=00000002

ال 2 معناه نوع صوره مثل 1 نوع مؤشرماوس 3 نوع أيقونه وهكذا

لمعرفه باقي الأنواع غير رقم 2 إلى أي رقم ولا حظ التغير في النافذه اليمنى

إستخرجنا النوع الأول صوره بقي أن نستخرج اللغه وإسم الصوره وعنوانها

ثاني أربع بايتات

50000080

أولا رقم 80 إنساه لأنه يمثل مؤشر إلى مصدر بعد عكس الرقم بدون 80

50 + عنوان جدول المصادر = جدول به كل المصادر التي تندرج تحت نوع صوره

لاحظ اللون الأحمر رقم 2 ولا حظ آخر 12 بت

نستخرج منه 3 معلومات عدد الصور الموجود =1 أول معلومه

إسم الصورة =85 عنوان لباقي المعلومات=130

إلى الآن أستخرجنا من ملف المصادر النوع صوره وعددها واحد و إسم أول صوره

إذهب للعنوان الذي أستخرجته اللون الأحمر رقم 3

يوجد به باقي المعلومات مرتبه كالتالي

عدد الصور =1 نوع لغه المصدر=3801 وهي العربيه عنوان لباقي المعلومات

بعد إستخراج العنوان إذهب إليه اللون الأحمر رقم 4

يوجد به باقي المعلومات عن المصدر مرتبه كالتالي

عنوان بدايه محتويات الصوره وحجم المحتويات لاحظ البيانات في النافذه على اليمين

هذه الأربع طرق تستخرج بها كل المصادر

تابع وإستخرج اللون الأخضر بنفس الطريقه وهو عباره عن 3 أيقونات

نفس الشرح ولكن الخطوه الثانيه كررها 3 مرات وهكذا

//////////////////////////////

الحين توصلنا لمعرفه كيف يقوم المترجم بكتابه

ترويسات أو قواعد كل من

الملف التنفيذي + الدوال المصدره + الدوال المستورده + المصادر

هذه القوانين في كل المترجمات متشابه

أتمنى إنك تراجع هذه القواعد وتجرب ولو مئه مره لين ما تفهمها

وبعدين نكمل للغوص في باقي تفاصيل المترجمات

//////////////

أي إستفسار ............تفضل

تم تعديل هذه المشاركة بواسطة jaas في 13 أبريل 2005 في 00:42

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#5

غريب أمر المنتدى

لا يوجد من يجيب

هل الخطوات مفهومه. أكمل

أو الخطأ مني ما أعرف أشرح ؟؟؟؟

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#6

الموضوع فقط يهم دارسى ال computer science على الاقل لانهم درسوا مادة ال compiler building اما الباقى فهم متفرجون كالعاده (لا اقصد إحباطك) و لكن الموضوع فعلاً مهم و يلقى الضوء على مجاهل لانعرفها

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#7

السلام عليكم,

الأخ jaas أشكرك على المجهودات التي تقوم بها وكما يجب أن نصبر قليلا فلربما الموضوع جديد والإخوة يلزمهم ربما بعض الوقت لإستيعاب هذه المعلومات القيمة. وكما يجب أن لا تحس أن عملك لم يصلح لشيء فحتى إذا لم يكن هناك مهتمون الآن فربما الغد يأتي بأشياء أخرى. فلنكن متفائلين ونسير في عملنا وبالتوفيق إن شاء الله.

مشكور مرة أخرى وإلى اللقاء.

#8

السلام عليكم

الاخ الحبيب jaas اولاً احيك على هذا المجهود الطيب, ياريت تكمل فانا من المتابعين ولا تستعجل على رزقك الاسئله جايه إن شاء الله, المهم ان تواصل بنفس النشاط والهمه.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#9

مرحبا ...

الحين أقدر أكمل تأكدت إنه في أعضاء متابعين وفاهمين القصه؟

تكمله الشرح

وين وصلنا .

بعد ما يكمل المترجم كتابه مقدمه الملف يبدأ يترجم الكود .

قبل الترجمه : مما يتكود الكود

1- ثوابت 2-متغيرات 3- دوال 4-جمل شرطيه دورات أوامر المترجم (مايكرو)

- الثوابت

الثوابت في البرنامج عباره عن قيمه لا تتغير طوال تنفيذ البرنامج

وتكون مخزن في قسم البيانات . يعرف الثابت في لغه السي

#define

ويستعمل بكثره في الدوال لاحظ الداله

SetFileAttributes (hFile,FILE_ATTRIBUTE_ARCHIVE);

لاحظ البارمتر الأول المقبض والبارمتر الثاني هو ثابت لخصائص الملف

ولأنه ثابت تستطيع كتابه نفس الداله بهذا الشكل

SetFileAttributes (hFile,0x20);

لأنها القيمه التي عرف بها الثابت

بمعنى شغله المترجم في الثوابت بسيطه يستبدل إسم الثابت بالقيمه التي عرفتها له .

المتغيرات:

أعتقد إنك لا حظت في أي لغه برمجه أن للمتغيرات أنواع مثل

نوع حرف نوع رقم نوع مقبض ومئه نوع ونوع

هل تصدق كلامي لو قلت إنه مافي أنواع للمتغيرات كلها نفس الشيء

أكيد تريد إثبات شوف الخبصه في الأنواع

int bb;
bb='a';
HANDLE hf;
hf=&bb;
MessageBox (NULL,(char*)hf,NULL,MB_OK);

جرب الكود. أعتقد إنك تأكدت إنه ما في فرق بين الأنواع

لأنه أي متغير يمثل عنوان في الذاكره

الإختلاف الوحيد بين المتغيرات هو مواقعها في الذاكره

هذا الموقع يختلف على حسب مكان تعريفك للمتغير

إذا عرفت المتغير داخل داله يصير مكانه المكدس. إذا عرفته في مقدمه الكود يصير مكانه قسم البيانات

وتصبح المتغيرات محليه وعامه

كيف يقوم المترجم بتعريف المتغيرات

إذا كان متغير عام الطريقه ولا أسهل .بعد ما يحسب حجم المتغير

يحجز في قسم البيانات مساحه من الذاكره وعنوان هذه المساحه يصير هو المتغير

ويبحث عن إسم المتغير إلي إنت كتبته في الكود ويستبدل الإسم بعنوانه في الذاكره .بكل هذه البساطه

أوكي لو كان المتغير محلي. هنا لا زم تكون عندك خبره في الإسمبلي وفي المكدس مكان التعريف

نبدأ حبه حبه

لكل قسم في البرنامج دليل هذا الدليل عباره عن مسجل يمثل الموقع الحالي في البرنامج

فمثلا لو حبيت تعرف مكان التعليمه الحاليه في قسم الكود. مسجل eip يؤشر عليها

لو حبينا نعرف الموقع الحالي في المكدس .مسجل esp يؤشر عليها

بعد أن عرفنا مسجل دليل المكدس المهمه تسير سهله .بهذه الطريقه

يبحث المترجم داخل الدوال عن المتغيرات المحليه يحسب حجمها + مسجل دليل

المكدس=عنوان هذا العنوان يستبدله المترجم بإسم المتغير المحلي . بهذه البساطه

الزبده

المتغيرات العامه = عنوان يكتبه المترجم في قسم البيانات

المتغيرات المحليه= عنوان دليل المكدس+ حجم المتغير

ملاحظه: بالنسبه للمتغيرات المحليه =دليل المكدس+حجم المتغير

حجم المتغير ليس بالضرورة مساوي ضبط لحجمه في الكود يكود زائد بقليل

فمثلا بعض المترجمات تتبع إسلوب مضاعفات الرقم 4 بايت لأنه 32 بت = 4 بايت

لو كان حجم المتغير = 6 فيكتب بدلها 8 لو كان 9 = 12 يعني مضاعفات 4

وإذا كان أصغر من 4 يكتب 0 يعني = عنوان دليل المكدس فقط لأن حجمه الإفتراضي4

لو واحد ذكي يسأل لماذا حجم المتغير زائد دليل المكدس المفروض ناقص دليل المكدس؟

الجواب لأن دليل المكدس يؤشر على المكدس بالمقلوب بمعنى أنه يبدأ بأكبر قيمه في المكدس لين يوصل 0

لو واحد أذكى من الي قبل لماذا يؤشر بالمقلوب؟

أذكر إني كتبت ملاحظه عندما شرحت مقدمه الملف التنفيذي أن حجم المكدس

يبدأ دائما واحد ميجا بايت . أوكي لو ما كفى حجم المكدس تتوقع شو يصير

فجأه يختفي البرنامج

أكيد مرت على بعضكم أتمنى تكون عرفت السبب

هذه الغلطه تحدث في البرامج عندما يزيد تعريف متغيرات محليه كثيره حجمها أكبر من ميجابات

وطبعا هذه المشكله مشهوره في البرامج الكبيره .

السؤال للي يريد يصمم برامج إحترافيه كيف أتجنب هذه المشكله

1- لا تقوم بتعريف أي متغير داخل حلقه متكرره وهذا أكثر سبب لحدوث المشكله

2- أكثر من إستخدام الدوال الفرعيه في البرنامج بحيث كل داله يكون فيها عدد قليل من المتغيرات المحليه

3- إستخدم متغيرات عامه في بعض الدوال

إذا ما دخلت رأسك الفكره زود حجم المكدس من 1 ميجا ل أي حجم . لكن غير مستحسن

الدوال:

ترجمه الدوال في نظام وندوز بالنسبه للمترجم مجرد لعبه . بهذا الشكل

دفع البارمترات للمكدس إستخراج عنوان الداله تم شرح الطريقه راجع الدرس

والإتصال بالداله فقط. يقوم النظام بإرجاع الحاله في المسجل eax

الحلقات والجمل الشرطيه وأوامر المترجم :

كل الذي تم شرحه مسبقا متشابه في كل المترجمات.

عدى هذا القسم . هذا القسم هو الذي يمثل فرق بين مترجم وآخر

يعتمد على طريقه وأفكار الفريق المطور للمترجم

بالنسبه لأوامر المترجم أقصد بها الماكرو فمثلا في فيجول سي

ZeroMemory ,strcpy ,memcpy

هذا الأوامر وهي تختلف عن دوال النظام

فمثلا عندما يجد المترجم مايكرو يستبدله بكود كامل للميكرو وليس بإستدعاء داله

إستخدام المايكرو بكثره في البرامج يزيد حجمها ولكن تصير معتمده على نفسها

وكل واحد على كيفه

إذا حبيتوا نتطرق في هذا القسم أكثر

تفضلوا...... كل واحد وهمته

1

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#10

السلام عليكم

فعلاً مشكلة المكدس لايتنبه لها الكثيرون, لذالك احبذ إستخدام المتغيرات العامه قدر المستطاع, كذالك إستخدام المكرو افضل من إستخدام call ودالك لان call تتسبب فى مشكلتين, الاولى هى ان البرنامج يصبح ابطاء ثانياً لان عملية call تستهلك المكدس, كل عملية call تقوم بستهلاك 8 بيت هذا إذا لم يكن هناك متغيرات مرسله عبر المكدس, وإذا كان الكود الذى نستدعيه خالى من المتغيرات المحليه.

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11

السلام عليكم ,,

استمر ,, وأهملوني قليلا ,, واتمنى أن لايقل نشاطكم حتى أعود بعد الامتحانات يوم 1 / 8 المقبل ,, لأتبلاكم بأسئلتي لأني نويت أن أتقتحم مواضيعكم الرائعة هذه ,,

ولدي الكثير من الأفكار أود مناقشتها ,, لكن من أين نشتري الوقت ؟ :(

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#12

السلام عليكم

الاخ HGB انا من زمان احاول جذبك من مستنقع سى بلس بلس الى روضة الاسمبلى والظاهر إن الاخ jaas نجح فى اللى انا فشلت فيه.

نحن فى إنتظارك وربنا يوفقك فى الامتحانات, إنت وجميع الاخوه الاعضاء قول آمين.

والسلام

تم تعديل هذه المشاركة بواسطة احمد غريب في 28 يونيو 2004 في 22:30

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#13

مرحبا

وجدت ملف مهم في هذا الموضوع

ترويسه الملف التنفيذي لنظام يونكس

تجده في الملف المرفق

unixformat.pdf

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#14

انا يا اخواني صممت مترجم من لغة الpascal لكني لم اتطرق الى كل ما تطرق اليه الأخ من بايتات وكذا وكذا انا اعرف ان المترجم يصمم من سبع مراحل كل مرحلة تبرمج على حدا وكل مرحلة تختص بشيء معين ولم اعلم انها تكون بالشكل الي شرحه الأخ.

نموت وتحيا ...................فلسطين .

#15

السلام عليكم ورحمة الله وبركاته

ياسلالالالالالالالالالالالالالالام

الله يعطيك ألف عافية يأخي ويأستاذي الكريم jaas

وأتمنى ان تواصل الدروووس :)

فأنا فهمت نص ونص وحأرجع بإذن الله أقرأ الموضوع مره ومرتين وثلاثه حتى أفهم إن شاء الله تمام

أما انت ياخTerminator1 أتمنى ان توضح لنا المراحل السبعه التي إستخدمتها للمعرفه لا أكثر ولا أقل :)

ويالله مشكورين على مجهوداتكم الأكثر من راااائعه

وفي امان الله

تم تعديل هذه المشاركة بواسطة al_aman في 9 نوفمبر 2004 في 07:27

#16

اما الباقى فهم متفرجون كالعاده

----------

الاخ طارق ابراهيم : في هذا الموضوع لا تلوم احد لانه موضوع للخبراء والمتمرسين (فقط)

لكن مع ذلك يستحق الاطلاع

الف شكر jass ويعطيك العافية

#17

اشكر ك اخ jaasعلى هذا الموضوع المهم والله يوفقك

#18
H7SE كتب:
اما الباقى فهم متفرجون كالعاده

السلام عليكم ورحمة الله وبركاته

إن لله وإن إليه راجعون !!

إذا ردينا على الموضوع قالوا متفرجووون ..وإذا مرينا وماردينا قالوا مافيه إقبال على الموضع ؟؟

يعني شنو العمل ياجماعة الخير ؟؟

ويعبون على الناس وينسون أن العيب فيهم

أختكم الامان

#19

السلام عليكم ..

موضوع أكثر من رائع أخي ... بارك الله فيك

صراحة هذه المواضيع نادراً ما نجد من يتقن شرحها حتى اذا اتقن فهمها ..

أما أنا ، فلم افهم جميع ما ذكر .. سوف أعيد دراسة الموضوع مرة أخرى لعلني اتوصل الى فهم للمواضيع يمكنني من تطبيقه من خلال برامجي ..

تحياتي

#20

السلام عليكم

جزاك الله خيرا على هذه الدروس وزادها الله في ميزان حسناتك

تفضلوا إلى هذا الربط عسى أن يكون مرجع

http://compilers.iecc.com/crenshaw/

#21

مرحبا انا اريد ان اعمل مترجم سي على لغة الاسمبلي فمن يوجد عنه هذا المشروع يحكيلي او مترجم باسكال على لغة الاسمبلي

وشكرا لكم يا اخواني مع العلم انني محترف بلغة الاسمبلي

#22

الموضوع متميز مثل مواضيعك الأخرى

موضوع نظم التشغيل و المترجمات من المواضيع التي يتهرب منها بعض دكاترة الجامعات نظراً لتعقيدها

ولكن نحمد الله لوجود شباب عربي مهتم بمثل هذه المواضيع

ولكن يحتاج الموضوع الى التبسيط حيث اني درست مادة مترجمات في الكلية ولكن خرجت منها انا وبقية الدفعة مثل ما كما دخلت نظراً لان المدرس اصلاً غير متخصص في هذا الموضوع .

نحتاج شرح مبسط لمعرفة الخطوات النظرية والخوارزميات الأولية الخاصة ببناء المترجمات مثل اعراب التعبير و فرز المقاطع وحساب قيمة التعبير . حيث ان مرحلة التحويل الى لغة التجميع تأتي في المراحل الاخيرة من موضوع المترجمات .

تحياتي لك

اخوك ابراهيم

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#23

مقدمة الملف التنفيذى هذا كلها عناوين كيف تكتب بلغة السى

هل لها طريقة معينة ام باستخدام define#

_____________________________

C Language && Windwos_API

_____________________________

#24

كيف ياشباب اكتب ملف تنفيذى بهذه العنواين الذى ذكرت فى المشاركة الاولى فى الموضوع

يعنى كيف اكتب ملف تنفيذى يشمل كل الكود الخاص باللغة

وكيف يتم حجز مكان فى الذاكرة حسب نوع المتغير

_____________________________

C Language && Windwos_API

_____________________________

#25

درس رائع وكاتب اروع

مـــــــــــــــــــــــــــــــــــــــــــــــ كـــــــــــــــــــــل احترامي ــــــــــــــــــــــــــــــــــــــع

مواضيع مشابهة