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

[ تمت الإجابة ]كيف أحصل على مجموعة حروف بين عنوانين؟

بدأه GHOST2010 في 14 يوليو 2009 · 2 رد · 750 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

فى متابعتى لتعلم الأسمبلى وفى محاولتى للصعود من المستوى -1 إلى المستوى 0 :blink:

واجهتنى مشكلة وهى

عندى مثلا متغير عبارة عن جملة معينة يبدأ عند العنوان 004995B8 وينتهى عند العنوان 00499600

أريد أن أحصل على جزء من هذه الجملة وليكن فى المجال من 004995C8 إلى 004995E0

كيف أقوم بهذا العمل؟؟

لاحظوا إنى قلت أنى أحاول الصعود من -1 إلى 0 ,, يعنى بدون استهزاء وإلا سأحذف الموضوع :angry: :angry:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#2

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

اقتباس
عندى مثلا متغير عبارة عن جملة معينة يبدأ عند العنوان 004995B8 وينتهى عند العنوان 00499600

أريد أن أحصل على جزء من هذه الجملة وليكن فى المجال من 004995C8 إلى 004995E0

كيف أقوم بهذا العمل؟؟

بامكانك استخدام دوال API لهذه العملية او استخدام تعليمات الاسمبلي فقط

في كلا الحالتين عليك ان تُنشأ متغير وتحدد حجمه بناء على ما تريد لتحصل على جزء من الجملة ففي الحالة التي ذكرتها يمكن تحديد حجم

المتغير كما يلي :

  1. mov ebx , 004995C8
  2. mov edx , 004995E0
  3. sub edx,ebx ; now edx contain the buffer length
  4.  

باستخدام دوال API :

استخدم الدالة lstrcpyn

مع ملاحظة اضافة بايت واحد لحجم المتغير محجوزة لعلامة NULL Terminated

يُصبح الكود مثلا كما يلي:

  1. mov ebx , 004995C8
  2. mov edx , 004995E0
  3. sub edx,ebx ; now edx contain the buffer length .
  4. inc edx ; add 1 byte to Buffer length for NULL Terminated
  5. push edx
  6. invoke GlobalAlloc,GMEM_FIXED,edx
  7. pop edx
  8. invoke lstrcpyn,eax,ebx,edx
  9.  

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

استخدام اوامر الاسمبلي :

نستخدم امر rep الذي يقوم بتكرار تعليمة اخرى بمقدار العدد الموجود في المسجل ECX والذي يحتوي حجم النص المراد حفظه ،

وتعليمة النقل مثل movsb تنقل البيانات عند العنوان الموجود في المسجل ESI الى العنوان في EDI

  1. mov ebx , 004995C8
  2. mov edx , 004995E0
  3. sub edx,ebx ; now edx contain the buffer length .
  4. push edx
  5. invoke GlobalAlloc,GMEM_FIXED,edx
  6. mov esi,ebx
  7. mov edi,eax
  8. pop edx
  9. mov ecx,edx
  10. rep movsb
  11.  

#3

شكرا لك

لقد تحايلت على المشكلة بطريقة مشابهة للطريقة الثانية لكن بطريقة غبية جدا :blink: :blink:

شكرا على المساعدة وجارى التجربة ,, :blush:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…