كيفية معرفة ما إذا كان عنصر تحكم صافي مرئيا باستخدام windbg

StackOverflow https://stackoverflow.com/questions/1606903

  •  05-07-2019
  •  | 
  •  

سؤال

وحصلت على crashdump أين نحن مناقشة ما إذا كان عنصر تحكم مرئية للمستخدم النهائي أم لا. أبحث مع! لم لا استطيع ان ارى اي مجال الصريح الذي يحمل قيمة صواب / خطأ مطابقة مع الخاصية مرئي، التي لا مفاجأة أن كثيرا كما نحن ربما انخفض في teritory WIN32. لا أحد يعرف كيف يمكن استنتاج ما المرئية قد عاد من ملف تفريغ؟

وذلك بفضل أوسكار

هل كانت مفيدة؟

المحلول

وكان فكرتي الأولى أن هذا كان مجرد سؤال من البحث عن مجال حق، ولكن في الواقع استغرق الأمر أكثر قليلا من الحفر. إذا نظرتم تحكم في العاكس، سترى أن الخاصية مرئي تدعو GetVisibleCore، والذي يتحقق حقل الدولة الداخلي مقابل قيمة 2 (الذي صادف أن يكون STATE_VISIBLE ثابت).

وذلك من أجل معرفة ما إذا كان عنصر تحكم مرئيا، نحن بحاجة إلى تحديد مجال الدولة والقيام ببعض التلاعب قليلا.

إذا كان لديك عنوان المثال، يمكنك القيام بما يلي:

.shell -ci "!do <ADDRESS>" grep state   (use findstr, if you don't have grep)

والإخراج هو شيء مشابه لهذا

0:000> .shell -ci "!do 015892a4" grep state
03aeedcc  400112c       4c         System.Int32  1 instance 17432589 state  <=== HERE!
03aeedcc  400112d       50         System.Int32  1 instance     2060 state2
049ac32c  40011ef       d0 ...lized.BitVector32  1 instance 01589374 state
03aeedcc  40011f0      ad4         System.Int32  1   static        1 stateScalingNeededOnLayout
03aeedcc  40011f1      ad8         System.Int32  1   static        2 stateValidating
03aeedcc  40011f2      adc         System.Int32  1   static        4     stateProcessingMnemonic
03aeedcc  40011f3      ae0         System.Int32  1   static        8 stateScalingChild
03aeedcc  40011f4      ae4         System.Int32  1   static       16 stateParentChanged

لاحظ أن هناك حقلين الدولة. أنا لم ينظر إلى ماذا هذا هو الحال، ولكن واحدة تريد هو System.Int32. في بلدي على سبيل المثال لديها قيمة 17432589.

والتعليمات البرمجية في GetState كما يلي

return ((this.state & flag) != 0);

لذلك كل ما عليك القيام به من هنا (17432589 & 2) != 0 وسيكون لديك الدولة مرئي المثيل المحدد.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top