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

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

بدأه Electronic boy في 17 يوليو 2010 · 8 رد · 3,763 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اكتشفت بالصدفة أثناء العمل على المنقح OllyDBG بأن هناك نمطين للعنونة :

1) Absolute كما في الصورة الأولى.

2) Relative كما في الصورة الثانية.

كما أن هناك نمط ثالثاً يستخدم في الـ HexEditor وهو نمط العنونة Offset ، كما في الصورة الأخيرة.

في البداية ، كنت أعتقد بأن العنوان المقابل لكل تعليمة في نافذة المنقح يمثل الموقع الفعلي في الذاكرة أو ما يسمى بالعنوان الفيزيائي Physical Address!! إلا أنه تبين لي فيما بعد أنني كنت مخطئاً .

لتوضيح المقصود ، أرفقت الصور التالية :

( لاحظ علامة $ في حال نمط العنونة Relative )

فهل من توضيح لهذه الأنماط الثلاث ؟

كما أود أن أستفسر ، هل هذه العناوين تعكس موقع البرنامج بالذاكرة أم على وسيط التخزين ( كالقرص الصلب مثلاً ) ؟

post-8448-064228700 1279314729_thumb.jpg

post-8448-007791600 1279314758_thumb.jpg

post-8448-089349200 1279314784_thumb.jpg

المرفقات
Absolute_Address.JPGRelative_Address.JPGoffset.jpg

Electronic%20boy%203.jpg

قال أحد الحكماء المسلمين:

" العلم ثلاثة أشبار ، من دخل الشبر الأول تكبر ، و من دخل الشبر الثاني تواضع ، و من دخل الشبر الثالث علم أنه لايعرف شيئ !! "

#2

أنسى الذاكرة الفيزيائية الان ، انت غير مخول كمستخدم للتعامل معها مباشرة .

طريقة العرض Absolute ستقوم باظهار العنوان الوهمي للتعليمات (Virtual Address) .

طريقة العرض Relative ستقوم باظهار عنوان التعليمات بالنسبة لموقعها الى عنوان اخر تختاره انت (عن طريق الضغط مرتين على عمود الـAddress) .

الـoffset بشكل عام هو عنوان ازاحة من بداية الشئ ، مثلا لدي structure كالتالي :

struct {
	DWORD a;

	WORD  b;

	BYTE  c[5];

	DWORD d;

	QWORD e;
}

فإن الـoffset للعضو d يساوي 11 او 0xB .

3

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

أشكرك على الرد ، لكنني لم أفهم !! :wacko:

- لماذا أنا ( لست أنا تحديداً ، لكن المقصود المستخدم بشكل عام ) غير مخول لاستخدام الذاكرة الفيزيائية ؟؟ ألم يتم تخزين البرنامج في الذاكرة الفيزيائية وقت التنفيذ ؟

- ماهو العنوان الوهمي ؟؟ ولماذا وهمي ؟؟ ( كيف تم الحصول عليه ؟ )

اقتباس
طريقة العرض Relative ستقوم باظهار عنوان التعليمات بالنسبة لموقعها الى عنوان اخر تختاره انت (عن طريق الضغط مرتين على عمود الـAddress)

أرجو التوضيح بمثال ، وماهو موقع العنوان الآخر ؟ وكيف يتم تحديده ؟ وماذا تعني علامة $ ؟؟

- بالنسبة للـ Offset ، كيف أعرف العنوان الذي تبدأ منه الإزاحة ؟؟ وكيف حسبت أن الإزاحة للعضو d تساوي 11 ؟

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

آسف على الإطالة ، لكن فعلاً موضوع العنونة يسبب لي الكثير من المشاكل :blink: كما أنه يبدو لي غير مفهوم ومتضارب !!

1

Electronic%20boy%203.jpg

قال أحد الحكماء المسلمين:

" العلم ثلاثة أشبار ، من دخل الشبر الأول تكبر ، و من دخل الشبر الثاني تواضع ، و من دخل الشبر الثالث علم أنه لايعرف شيئ !! "

#4
اقتباس
- لماذا أنا ( لست أنا تحديداً ، لكن المقصود المستخدم بشكل عام ) غير مخول لاستخدام الذاكرة الفيزيائية ؟؟ ألم يتم تخزين البرنامج في الذاكرة الفيزيائية وقت التنفيذ ؟

كمستخدم للنظام سواء كنت Programmer او User ، فليس عليك التعامل مع الذاكرة الفيزيائية بشكل مباشر الا في حالات معينة، انت تتعامل مع الـذاكرة الوهمية للعمليات فقط .

ليس كل البرنامج يتم تحميله الى الذاكرة الفيزيائية عادة ، ولكن يتم تحميل الـMemory Pages المستخدمة والأكثر استخداما سواء لغرض التنفيذ او الفراءة والكتابة .

اقتباس
- ماهو العنوان الوهمي ؟؟ ولماذا وهمي ؟؟ ( كيف تم الحصول عليه ؟ )

في الصورة التي ارفقتها انت مثلا ، يكون العنوان الوهمي للتعليمة "AND ESP, FFFFFFF0" هو 0x004012F6 ، عادة يقال "العنوان" فقط دون ذكر كلمة "وهمي" .

اذا كنت لا تعرف الفرق بين الذاكرة الفيزيائية والوهمية اصلا فانت بحاجة الى قراءة بعض المراجع مثل مراجع Intel ، ايضا قراءة بعض المقالات او الكتب عن هذا الموضوع كالموجودة في كتاب Windows NT Internals .

1

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5
اقتباس
في الصورة التي ارفقتها انت مثلا ، يكون العنوان الوهمي للتعليمة "AND ESP, FFFFFFF0" هو 0x004012F6 ، عادة يقال "العنوان" فقط دون ذكر كلمة "وهمي" .

اذا كنت لا تعرف الفرق بين الذاكرة الفيزيائية والوهمية اصلا فانت بحاجة الى قراءة بعض المراجع مثل مراجع Intel ، ايضا قراءة بعض المقالات او الكتب عن هذا الموضوع كالموجودة في كتاب Windows NT Internals .

في الحقيقة لقد قرأت بعض مراجع إنتل ، وبعض الداتا شيت الخاصة بالمعالجات 8008 , 8080 , 8088 , 8086 ، لكنني لم أفهم هذه النقطة بالتحديد ، وهي تسبب لي الكثير من الإرباك !! ، ألا وهي العنوان الوهمي ، ولذلك طرحت هذا السؤال .

ولا أدري لماذا لم يقم أحد بإفادتي حتى الآن ، رغم أنه موضوع من المهم فهمه.

كيف أحصل على العنوان الفيزيائي ؟؟ وهل المؤشرات بلغة سي تعطي العنوان الوهمي ؟؟

كما أرجو أن تجبني على السؤال في المشاركة السابقة ، كيف عرفت أن الـoffset للعضو d يساوي 11 ، والكود المكتوب بأي لغة ؟؟

تحياتي لك ، وأنتظر التوضيح بفارغ الصبر ،،،

Electronic%20boy%203.jpg

قال أحد الحكماء المسلمين:

" العلم ثلاثة أشبار ، من دخل الشبر الأول تكبر ، و من دخل الشبر الثاني تواضع ، و من دخل الشبر الثالث علم أنه لايعرف شيئ !! "

#6

راجع الفصل الأول من كتاب Memory Management : Algorithms and Implementation in C++/C لـ Bill Blunden حيث يشرح لك العنونه داخل انظمة 16 و 32 بت ايضا داخل الـ Real Mode و الـ Protected Mode بشكل مبسط.

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 21 يوليو 2010 في 22:21

1

مدونتي: C++ Tips and Tricks

#7

شكراً لك على الإفادة .

Electronic%20boy%203.jpg

قال أحد الحكماء المسلمين:

" العلم ثلاثة أشبار ، من دخل الشبر الأول تكبر ، و من دخل الشبر الثاني تواضع ، و من دخل الشبر الثالث علم أنه لايعرف شيئ !! "

#8

إضافة على الموضوع:

أنماط العنونة

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9
Electronic boy كتب:

اكتشفت بالصدفة أثناء العمل على المنقح OllyDBG بأن هناك نمطين للعنونة :

1) Absolute كما في الصورة الأولى.

2) Relative كما في الصورة الثانية.

كما أن هناك نمط ثالثاً يستخدم في الـ HexEditor وهو نمط العنونة Offset ، كما في الصورة الأخيرة.

في البداية ، كنت أعتقد بأن العنوان المقابل لكل تعليمة في نافذة المنقح يمثل الموقع الفعلي في الذاكرة أو ما يسمى بالعنوان الفيزيائي Physical Address!! إلا أنه تبين لي فيما بعد أنني كنت مخطئاً .

لتوضيح المقصود ، أرفقت الصور التالية :

( لاحظ علامة $ في حال نمط العنونة Relative )

فهل من توضيح لهذه الأنماط الثلاث ؟

كما أود أن أستفسر ، هل هذه العناوين تعكس موقع البرنامج بالذاكرة أم على وسيط التخزين ( كالقرص الصلب مثلاً ) ؟

post-8448-064228700 1279314729_thumb.jpg

post-8448-007791600 1279314758_thumb.jpg

post-8448-089349200 1279314784_thumb.jpg

اليك هدا الكتاب عندما تقرآه

سيدهب عنك لبس

الشافي المغيث في فهم الأِر-في-اي و الاوفسيت.pdf

http://www.4shared.com/file/Td4WQz0p/____--__.html

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