صاحب التعليق الاصلي : AnasD في 30-08-2008, 09:30 AM
شكراً اخ GamingMasteR على الدرس القيم
"< رغم ندرة مشاركاتي بس اتمنى تعتبروني صديق >"
انا في عندي سؤالين
الاول بشأن الكود اخي
واضح انه لمعرفة فيما إذا كان hwbp #1 هو الذي حدث ام لا وذلك من خلال Dr6 ... جميل جداً, بس مشكلتي انني لست مبرمج بلغة ++C لذلك لم افهم تركيب جملة الشرط هذه .
اتمنى لو انه في توضيح حتى اتمكن من كتابة جملة الشرط للـ hwbp #3 و #4
السؤال الثاني إذا ما في غلبة
لدي برنامج قمت بصطياد السيريال لمساره على جهازي - يعتمد السيريال على القرص الموجود عليه البرنامج -
حاولت اقوم بتنفيذ هذا الدرس عليه بس في مشكلة وهي كيف يمكنني الحصول على محتوى ST0 عند النقطة المحدده في الصوره - بالمرفقات-.
#### على فكره انا لم افهم ما تقوم به هذه التعليمات (FADD , FCOMP , FSTSW ) لكن لاحظة ان ( FADD , FSTP , FLD) تؤثر على ST0 والتعليمة FCOMP تقوم بالمقارنة.
إذا اتمكنت من انشاء اللودر سأضعة مثال في هذا الموضوع
وشكراً
صاحب التعليق الاصلي : GamingMasteR في 30-08-2008, 11:12 AM
السلام عليكم.
كما ذكرت سابقاً فإن اول 4bit في مسجل Dr6 هو الذي يحدد أي HWBP حدث , يعني اذا كان اول بت = 1 فان اول HWBP حدث واذا ثاني بت = 1 فان ثاني HWBP حدث وهكذا ..
هذا الكود يقوم باختبار قيمة البت الأول (رقم صفر) لمعرفة اذا كان اول HWBP حدث , يمكن تغيير 0 الى رقم البت المراد اختباره , مثلا لاختبار البت الثالث (رقم 2) :
----------------------------
هذه التعليمات خاصة بمعالج الـFPU وهو مخصص للتعامل مع الاعداد العشرية والكبيرة , يحتوي على عدة مسجلات 8 منهم لحفظ الارقام طول كل واحد منهم 10 بايت وهي تمثل من ST0 الى ST7 .
يمكن اصطياد قيم هذه المسجلات بنفس الطريقة السابقة , هناك عنصر في الـCONTEXT structure اسمه FloatSave وهو عبارة عن structure من النوع FLOATING_SAVE_AREA وتركيبته كالتالي :
يحتوي هذا التركيب على المسجلات الخاصة بالـFPU ومنهم مسجلات الـST كلها تحت اسم RegisterArea وهي مصفوفة تتكون من 80 بايت (اي عدد الـST * طول كل واحد منهم) .
بالمناسبة هذه الأرقام تركيبها ليس كتركيب الارقام الصحيحة مثل DWORD-int-integer بل لها تركيبات خاصة ,, يمكنك تحويلها الى نص عن طريق احد دوال الـtext formatting مثل printf مع وضع الـformat للرقم "f%" , السلام عليكم .
---------------------------
صاحب التعليق الاصلي : MouradPr في 03-10-2008, 09:44 PM
ياعم وين حق الأسمبلي من الموضوع... البارحة كانت لي أول محاولة بالأسمبلي لأضع الدرس Serie API 3 أحببت أن أضيف هذه الطريقة لكني لم أفلح في وضع نقطة التوقف وذلك بسبب البنيات التي أضفت
DR7 و RegFlag
هل يمكن ان تتكرم وتقدم مساعدة بالأسمبلي..
صاحب التعليق الاصلي : GamingMasteR في 03-10-2008, 10:49 PM
للأسف هذه البنيات(التي بها bits) لابد من التعامل معها في الاسمبلي على انها DWORD ويتم التحقق من الـbit المراد عن طريق and/test .
صاحب التعليق الاصلي : GamingMasteR في 04-10-2008, 12:54 PM
أجدع كود اسمبلي لأجدع مراد في الدنيا
shift و and و or وكل اللي قلبك يحبه
شكراً اخ GamingMasteR على الدرس القيم
"< رغم ندرة مشاركاتي بس اتمنى تعتبروني صديق >"
انا في عندي سؤالين
الاول بشأن الكود اخي
if ((context.Dr6 & (1 << 0))) //hwbp #1
واضح انه لمعرفة فيما إذا كان hwbp #1 هو الذي حدث ام لا وذلك من خلال Dr6 ... جميل جداً, بس مشكلتي انني لست مبرمج بلغة ++C لذلك لم افهم تركيب جملة الشرط هذه .
اتمنى لو انه في توضيح حتى اتمكن من كتابة جملة الشرط للـ hwbp #3 و #4
السؤال الثاني إذا ما في غلبة
لدي برنامج قمت بصطياد السيريال لمساره على جهازي - يعتمد السيريال على القرص الموجود عليه البرنامج -
حاولت اقوم بتنفيذ هذا الدرس عليه بس في مشكلة وهي كيف يمكنني الحصول على محتوى ST0 عند النقطة المحدده في الصوره - بالمرفقات-.
#### على فكره انا لم افهم ما تقوم به هذه التعليمات (FADD , FCOMP , FSTSW ) لكن لاحظة ان ( FADD , FSTP , FLD) تؤثر على ST0 والتعليمة FCOMP تقوم بالمقارنة.
إذا اتمكنت من انشاء اللودر سأضعة مثال في هذا الموضوع
وشكراً
صاحب التعليق الاصلي : GamingMasteR في 30-08-2008, 11:12 AM
السلام عليكم.
إقتباس :اتمنى لو انه في توضيح حتى اتمكن من كتابة جملة الشرط للـ hwbp #3 و #4
كما ذكرت سابقاً فإن اول 4bit في مسجل Dr6 هو الذي يحدد أي HWBP حدث , يعني اذا كان اول بت = 1 فان اول HWBP حدث واذا ثاني بت = 1 فان ثاني HWBP حدث وهكذا ..
if ((context.Dr6 & (1 << 0)))
هذا الكود يقوم باختبار قيمة البت الأول (رقم صفر) لمعرفة اذا كان اول HWBP حدث , يمكن تغيير 0 الى رقم البت المراد اختباره , مثلا لاختبار البت الثالث (رقم 2) :
if ((context.Dr6 & (1 << 2)))
----------------------------
إقتباس :على فكره انا لم افهم ما تقوم به هذه التعليمات (FADD , FCOMP , FSTSW ) لكن لاحظة ان ( FADD , FSTP , FLD) تؤثر على ST0 والتعليمة FCOMP تقوم بالمقارنة.
هذه التعليمات خاصة بمعالج الـFPU وهو مخصص للتعامل مع الاعداد العشرية والكبيرة , يحتوي على عدة مسجلات 8 منهم لحفظ الارقام طول كل واحد منهم 10 بايت وهي تمثل من ST0 الى ST7 .
يمكن اصطياد قيم هذه المسجلات بنفس الطريقة السابقة , هناك عنصر في الـCONTEXT structure اسمه FloatSave وهو عبارة عن structure من النوع FLOATING_SAVE_AREA وتركيبته كالتالي :
struct {
DWORD ControlWord;
DWORD StatusWord;
DWORD TagWord;
DWORD ErrorOffset;
DWORD ErrorSelector;
DWORD DataOffset;
DWORD DataSelector;
BYTE RegisterArea[80];
DWORD Cr0NpxState;
} FLOATING_SAVE_AREA;
يحتوي هذا التركيب على المسجلات الخاصة بالـFPU ومنهم مسجلات الـST كلها تحت اسم RegisterArea وهي مصفوفة تتكون من 80 بايت (اي عدد الـST * طول كل واحد منهم) .
بالمناسبة هذه الأرقام تركيبها ليس كتركيب الارقام الصحيحة مثل DWORD-int-integer بل لها تركيبات خاصة ,, يمكنك تحويلها الى نص عن طريق احد دوال الـtext formatting مثل printf مع وضع الـformat للرقم "f%" , السلام عليكم .
---------------------------
صاحب التعليق الاصلي : MouradPr في 03-10-2008, 09:44 PM
ياعم وين حق الأسمبلي من الموضوع... البارحة كانت لي أول محاولة بالأسمبلي لأضع الدرس Serie API 3 أحببت أن أضيف هذه الطريقة لكني لم أفلح في وضع نقطة التوقف وذلك بسبب البنيات التي أضفت
DR7 و RegFlag
هل يمكن ان تتكرم وتقدم مساعدة بالأسمبلي..
صاحب التعليق الاصلي : GamingMasteR في 03-10-2008, 10:49 PM
للأسف هذه البنيات(التي بها bits) لابد من التعامل معها في الاسمبلي على انها DWORD ويتم التحقق من الـbit المراد عن طريق and/test .
صاحب التعليق الاصلي : GamingMasteR في 04-10-2008, 12:54 PM
أجدع كود اسمبلي لأجدع مراد في الدنيا
shift و and و or وكل اللي قلبك يحبه
سبحان الله وبحمده، سبحان الله العظيم