لايف نت - عرض مشاركة واحدة - مترجمات لغات البرمجه, بنيه البرامج رقم العضوية : 95   <font color="#0033CC">MaZeN</font> MaZeN ">

عرض مشاركة واحدة

  مشاركة رقم : 1 (permalink)  
قديم 07-08-2007, 03:19 PM
MaZeN
الصورة الرمزية MaZeN
مشرف سابق

رقم العضوية : 95
تاريخ التسجيل : Jan 2007
العمر : 23
المشاركات : 4,901
بمعدل : 6.65 يوميا
الجنس :
على النت: 1999
المؤهل الدراسي : جامعي
الجوال : Motorola L7
إرسال رسالة عبر مراسل MSN إلى MaZeN إرسال رسالة عبر مراسل Yahoo إلى MaZeN

MaZeN غير متواجد حالياً عرض البوم صور MaZeN



المنتدى : منتدى لغات البرمجة
افتراضي مترجمات لغات البرمجه, بنيه البرامج

مترجمات لغات البرمجه إسم يدل على الغموض
تنقسم المترجمات إلى عده أنواع منها
مترجمات البرامج القياسيه : مثل فيجول سي بورلند سي الدلفي وغيرها
مترجمات مباشره : مثل لغه بيرل و 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
توجه مباشره للعناون ماذا تلاحظ مجموعه من الأرقام كما هو في الصوره



قبل أن تكمل إختر أو علم على أول 20 بايت لاحظ من بدايه هذا العنوان كل 20 بايت مختصين في
داله ربط يستورد منها البرنامج لمعرفه ماهي مكتبه الربط لا حظ اللون الأحمر رقم 1 القيمه
22460000
هذا ما تراه لكن المعالج قبل ما يستعملها يقلب كل بايتين هذا قانون لا زم تكون حافظه فتصبح
00004622
إذهب للعنوان ماذا تلاحظ إسم مكتبه الربط Kernel32.dll
نرجع لأول عشرين بايت على اللون الأخضر إعكس الرقم بياخذك لعنوان
هذا العنوان يحتوي على سلسله من العناوين كل عنوان بعد ما تقلبه يؤشر إلى داله مستورده من نفس المكتبه
تتبع اللون الأخضر وشوف
بقي أهم شيء اللون الأزرق اللون الأزرق يحتوي على نفس ما يحتويه اللون الأخضر في المرحله
الثانيه رقم تعكسه يوديك لأسم الداله وهو النظام المتبع في كل المترجمات أما اللون الأخضر فقط
في مترجمات مايكروسفت
بمعنى أن النظام لو ما لقي في البرنامج أول أربع بايتات من العشرين بايت مافي مشكله
بيدور في آخر أربع بايتات الطريقه المتبعه لمترجمات بورلند
إما 8 بايتات التي في الوسط خاصه بوندوز 98 ومي ويكتب فيها النظام عناوين خاصه
خارجه عن موضوعنا الحين خلنا في المترجمات
ملخص سريع لهذه المرحله
يقوم المترجم بالبحث عن الدوال المستخدمه في البرنامج بعد ما يجمعها يكتب في
ترويسه البرنامج عنوان الإستيراد يكتب في هذا العنوان لكل مكتبه مستورد منها يكتب عشرين بايت
وأهم شي يكتب آخر 8 بايتات وهي عنوان يدل على إسم المكتبه ومؤشر لجدول عناوين الدوال
بعد ما يكتب كل المكاتب بهذه الطريقه يكتب 20 بايت 000 ليدل على إنتها الجدول
كيف يفهمه نظام التشغيل جرب شغل الملف التنفيذي وإذهب إلى عناوين الدوال بتلاقيها
تغيرت إستبدلها النظام بعنوان الداله في الذاكره كيف عرفها ؟؟ سهله إذا إستخرج إسم الداله يستدعي هذه الداله
GetProcAddress
قواعد الدوال المصدره :
أعتقد إنا بدينا نفهم كيف ينسق نظام التشغيل . الحين دور على برنامج
يصدر دوال أو مكتبه ربط وإستخرج عنوان جدول التصدير وإذهب إليه .ملاحظه إذا كان البرنامج يعمل
أضف إلى العنوان الذي إستخرجته عنوان البرنامج الوهمي مثلا ImageBase = 77E60000
شو رايك تحاول تستخرجها لوحدك كذا تضمن إنك ما تنسا القواعد
وتتعلم كيف تكتشف أشيا جديده
بعطيك بعض المساعدات ترويسه جدول الملفات المصدره
يقع أول 45 بايت كل أربع بايتات تدل على شيء منها عدد الدوال المصدره
عناوينها أرقامها وأسمائها
أتمنى أكون حققت بعض الفائده من هذا
الدرس ملاحظه الدرس بعده ما خلص هذه قواعد ومن ثما بنبدأ في
الغوص في أعماق المترجمات يمكن ربك يفرجها ويطلع واحد يصمم مترجم للغه عربيه أو نظام
صدقوني الشغله سهله بس تريد مجموعه مبرمجين ما يكفي واحد

ومع السلامه


توقيع MaZeN




رد مع اقتباس