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

سؤال

مغلق
بدأه justnow في 8 فبراير 2005 · 4 رد · 727 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اريد ان اضع لكم مجموعة من الاسئلة التى لم استطع ان اعثر لها على

جواب,

اولا فى مجال تنظيم الذاكرة فى البرنامج:

الكل يعلم ان الاسمبلى المعدة لنعمل على 32bit يتم وضع البرنامج فى

segment واحد و ذلك نسبة لحجم السكمنت الكبير. هذا كان لان

16 بت اسمبلى كان حجم السكمنت 2^16 وهى تقريبا 64 كيلوبايت

اما 32 بت صار الحجم فيها 4 غيغا بايت او اكبر قليلا.

عندى معلومات ضئيلة و اظن ان بعضها مغلوط:

اعرف ان المسجل ESP و الذى يؤشر الى الاستاك ياخذ القيمة 0xfffffffe

عند بداية البرنامج حيث يؤشر الى نهاية السكمنت( ECS, EDS,ESS,EESكلها

تاخذ نفس القيمة لان السكمنت كبير و كافى) و عند اضافة push اى شئ للاستاك

تنقص القيمة فى ESP بمقدار 4 اى DWORD. من ما قلت يعنى الاستاك ياخذ

نهاية السكمنت و يتمدد متجه الى بداية السكمنت.

اذا كان ما ذكرت صحيحا فلابد ان يتشارك ال data و ال code بداية السكمنت

و يتمددا فى اتجاه الاستاك, اعلم ايضا ان الابيانات يتم التاشيؤ اليها بالمسجل EBP

و الكود ب EIP و لكن كيف يتم التوفيق بينهما, هل يختلطان ام ماذا؟

عندى سؤال اخر يمكن ان يتعلق بالاول (و لو انى ارى ان الاسمبلى لا تتجذاء)

اريد ان اسال عن الاستثنات فى الاسمبلى(Structured Exception Handeling)

هذا الموضوع فى الحقيقة تعبنى و لم استطع ان اتفهم ما هو FS .

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

#2

أخي الكريم , أعتقد أنة توجد فكرة بسيطة تنقصك ؟!

عندما أقول esp=ffffffff و eip=ffffffff

هل المسجلين يؤشران إلى نفس المكان في الذاكرة ؟!! بالتأكيد لا

لأن كل مسجل لدليل معين والأدلة CS , SS

النقطة الثانية , ترتيب المكدس من الأسفل إلى الأعلى ولذلك تجدة أول مقطع

يرتب النظام أي برنامج بهذة الطريقة

- مكدس -

-مقطع كود -

- مقطع بيانات -

ولذلك من سابع المستحيلات أن يدخلو في بعض ؟! وإذا زاد المكدس عن الحجم المقرر

يتوقف بل يختفي البرنامج

----

اقتباس
اريد ان اسال عن الاستثنات فى الاسمبلى(Structured Exception Handeling)

هذا الموضوع فى الحقيقة تعبنى و لم استطع ان اتفهم ما هو FS

المسجل FS لا يخص البرنامج وإنما يخص نظام التشغيل وهو من يتحكم بة ؟!

أما إذا كان سؤالك كيف يعمل ,

تجد الجواب في مواضيع برمجة الأنظمة وبالتحديد جدوال IDTR وهو يمثل عمليات المقاطعات والبوابات والإستثنائات وبالتأكيد المسجل FS يرمز لإستثنائات

-

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>

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

#3

اذا كان مسجلان يحملان نفس القيمة فليس من الضرورى ان يشيرا الى نفس العنوان

و ذلك لاحتمال الاختلاف فى المقطع كما ذكر الاستاذ jaas لكن.

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

التغيير اى من ECS,EDS,EES,ESS و الاشارة الى اى سكمنت اخر.

ا ى ان كل السكمنت register تاخذ نفس القيمة (السكمنت الذى يعمل عليه البرنامح)

لذلك (على حسب علمى الى الان) فانه من السهل ان يحدث تداخل.

هناك شئ اخر لم يكن واضحا من الرد الذى قراته

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

هذه العبارة لم استطع ان اتخيلها لانى لا اعرف ما هو الاسفل و ما هو الاعلى

بعدين هناك شئ اخر محيرنى.

اين تاخذ البيانات موضعها من البرنامج.

على حسب ترتيب jaas

استاك

كود

بيانات

يمكن تخيل ذلك اذا قسمت الملف الى ثلاثه و اعطيت esp القيمة صفر

و eip يؤشر الى ثلث السكمنت 0xffffffff/3

و ebp الى الثلثين 0xffffffff*2/3

بحيث اذا كان الكود كبيرا جدا جدا جدا يمكن ان يصل الى البيانات

و اذا كان الاستاك كبير جدا جدا جدا يمكن ان يصل الى الكود

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

اخيرا اذ ا كان هذا التقسيم صحيحا فاخبرونى (عندها اكون قد خبطت معاى خبطة حظ(ما اظن))

و الا اخبرونى الشء الصحيح.

ارجو ان اكون قد اوصلت سؤالى بالطريقة الصحيحة الان

فى انتظار اجابة

#4

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

الأخ justnow يجب أن نعرف أن في النمط 32 بت لا نتكلم عن العناوين أو الذاكرة الحقيقية بل الكل خيال virtual وكذلك الكلام عن السكمنت هنا قد نعتبره غير صحيح والأجدر أن نتكلم هنا على SELECTOR وهما قد نعتبرهم كطاولة تشير إلى الذاكرات الموجودة فيها المعطيات وكذلك عن privilege لهذه الذاكرات. وكما ذكر الأخ jaas فقد نجد نفس العناوين وفيها معطيات مختلفة فمثلا لو نفتح برنامجين مختلفين فقد نجد أن البرنامج الأول يبدأ في الذاكرة 400000 هيكس إلى 500000 مثلا وسنلاحظ أن البرنامج الثاني يشتغل في نفس العناوين ورغم كل هذا الكل يشتغل بطريقة سليمة ولا يوجد أي تداخل لا بين الكود ولا بين المعطيات.

فيما يخص الستاك فهي تشتغل من عنوان أعلى وكل ما ندفع فيها شيئا تنقص وهذه الطريقة استعملت حتى يبقى لنا متسعا للذاكرة إذا أردنا استعمالها. وعلى العموم فقيمة الستاك في البداية ليس له عنوان محدد كما ذكرت بل يمكن أن يحدده المبرمج وفي غالب الأحيان يحدده البرنامج إذا لم نرد تحديده. فنقل مثلا أن برنامجنا سيأخذ المكان من 400000 إلى 500000 في الكود والمعطيات وسيكون مكان الستاك في 600000 هذا سنعتبره عنوانا عاليا نسبة وستبدأ كل مرة في النزول وذلك لكي يبقى لنا المجال ما بين 500000 إلى الستاك كذاكرة يمكن أن نستعملها لأغراض أخرى وهو ما يسمى عادة ب heap وهذه الطريقة تمكن من الربح في الذاكرة.

أتمنى أن هذا المثال قد يكون أعطى صورة تقريبية لهذا وإلى اللقاء.

#5

من كلامك فهمت الاتى

1/ لو ان كل برنامج ياخذ سكمنت لوحده لاحتجنا الى اطنان من الرامات لتشغيل برنامجين فى نفس الوقت

2/الوندوز(او اى نظام 32بت) يدير الذاكرة بشكل سحرى بحيث يحافظ عليها و ينظمها فى

نفس الوقت

3/معرفة مثل هذه العناوين يمكن ان تكون مستحيلة( لان كل مرة و على حسب المزاج

تاخذ المسجلات قيمها)

4/ شكرا على التوضيح

5/ ياريت لو كان هناك فهم مغلوط تصلحه :)

هذا الموضوع مغلق.

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