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

[ تمت الإجابة ]هل من مساعد لشرح السؤال؟

بدأه CNE في 24 يناير 2010 · 7 رد · 1,108 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

حاولت اكثر من ٢٠ مره افهم السؤال ولم استطع ففكرت في اخواني هنا ممكن احد يساعدني في فهم السؤال .

Consider the following sequence of hexadecimal values:

55 89 E5 83 EC 08 83 E4 F0 31 C9 BA 01 00 00 00 B8 0D 00 00 00 01 D1 01 CA 48 79 F9 31 C0 C9 C3


This sequence of bytes represents a subroutine in Intel 80386 machine language in 32-bit mode.
  When the instructions in this subroutine are executed, they leave values in the registers %ecx and %edx. What are the values?
#2

السؤال يقول لك

اقتباس

هذه سلسلة من البايتات بالتمثيل الست عشري والتي تمثل إجرائية لمعالج intel 386 بمسجلات 32 بت.

عندما يتم تنفيذ هذه السلسلة فإنها تضع قيم في المسجلين ECX و EDX، ما هي هذه القيم؟

الجواب يا أخي الكريم،

انقل السلسلة إلى داخل برنامج تنفيذي بواسطة hex editor (أو من خلال منقح Olly مباشرة)

حيث سيقوم Olly بعد حفظها بإظهار التعليمات المقابلة لها بالأسمبلي، وسيكون بإمكانك وضع المؤشر الخاص بـ IP register على بداية أول تعليمة فيها بحيث يبدأ التنفيذ منها، وتصبح قادر على تنفيذ هذه الإجرائية ورؤية القيم الجديدة في ECX و EDX.

هذا هو الـ subroutine بعد الحصول على التعليمات

CPU Disasm
Address Hex dump 	Command 	Comments
00401000 	55 	PUSH EBP
00401001 	89E5 	MOV EBP,ESP
00401003 	83EC 08 	SUB ESP,8
00401006 	83E4 F0 	AND ESP,FFFFFFF0
00401009 	31C9 	XOR ECX,ECX
0040100B 	BA 01000000 MOV EDX,1
00401010 	B8 0D000000 MOV EAX,0D
00401015 	01D1 	ADD ECX,EDX
00401017 	01CA 	ADD EDX,ECX
00401019 	48 	DEC EAX
0040101A	^ 79 F9 	JNS SHORT 00401015
0040101C 	31C0 	XOR EAX,EAX
0040101E 	C9 	LEAVE
0040101F 	C3 	RETN

القيمة في ECX ستكون: 0004D973h

القيمة في EDX ستكون: xxxxxxxxxxh (أتركها لك لإيجادها)

Do as I say, not as I do

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

#3

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

#4

عبر برنامج Olly افتح أي برنامج تنفيذي EXE لنقوم بالتعديل عليه مؤقتاً حتى نرى التعليمات المعطاة لك..

اضغط CTRL+E لتقوم بالتعديل على السطر الحالي

وأدخل البيانات المعطاة ثم وافق على التغيير وسيظهر كما في الصور التالية

post-7008-12643415268025_thumb.png

post-7008-12643415355058_thumb.png

Do as I say, not as I do

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

#5

الله يفتح عليك ويسهل آمورك ان شاء الله

للتأكد فقط. هل قيمة EDX هي 0007D8B5h ?

حاولت افهم subroutine ايش تعمل بالضبط لكن لم اتوصل لنتيجة. هل هي تقارن ارقام ومن ثم تجمع اما ماذا بالضبط؟

#6
CNE كتب:

للتأكد فقط. هل قيمة EDX هي 0007D8B5h ?

نعم، صحيح.

CNE كتب:

حاولت افهم subroutine ايش تعمل بالضبط لكن لم اتوصل لنتيجة. هل هي تقارن ارقام ومن ثم تجمع اما ماذا بالضبط؟

لا أعتقد أن لها وظيفة معينة، الغرض منها باعتقادي فقط توليد قيم نهائية في ECX و EDX بناء على قيمة أولية لـ EAX = 0Dh تعمل بما يشبه الحلقة، فقط لا غير.

* ليس هناك مقارنة أرقام.

* القفزة JNS تتحقق من SF بعد DEC لترى إن وصلت قيمة EAX إلى -1 أم لا (يعني الحلقة انتهت).

Do as I say, not as I do

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

#7

الله يسلمك ياغالي. بس حبيت اشاركك باللي توصلت اليه من خلال ملاحظتي لتنفيذ الدالة. جلست علي الدالة تقريبا ساعتين وكنت جالس اتابع المتغيرات في edx و ecx واكتشفت في الاخير انه الدالة هيا عبارة عن دالة تنفذ معادلة Fibonacci

لاحظ معايا الزيادة:

ecx=0 - edx=1

ecx=1 - edx=2

ecx=3 - edx=5

ecx=8 - edx=13

ecx=21 - edx=34

ecx=55 - edx=89

ecx=144 - edx=233

ecx=377 - edx=610

ecx=987 - edx=1597

ecx=2584 - edx=4181

ecx=6765 - edx=10946

ecx=17711 - edx=28657

ecx=46368 - edx=75025

ecx=121393 - edx=196418

ecx=317811 - edx=514229

هذا كل ما توصلت اليه وحبيت اشاركه معاك

1
#8

إن كانت الأرقام صحيحة فملاحظتك في مكانها :thumb_up:

تم تعديل هذه المشاركة بواسطة Xacker في 25 يناير 2010 في 11:22

Do as I say, not as I do

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

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