كيفية تجنب "(خالية)" تتبع مكدس الذاكرة المؤقتة في DPH_BLOCK_INFORMATION؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

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

gflags /p /enable myprogram.exe

وهذا ينجح في تأكيد الفساد:

===========================================================
VERIFIER STOP 00000008: pid 0x1040: corrupted suffix pattern 

    10C61000 : Heap handle
    19BE0CF8 : Heap block
    00000010 : Block size
    00000000 : 
===========================================================

عند أنتقل على التحقق كومة صفحة كاملة (gflags /p /enable myprogram.exe /full) تحسبا أن هذا سوف يتسبب في حدوث خطأ في الوقت الذي قدم الفساد، وأحصل على شيء أكثر من ذلك.

ولقد بدأت للحصول على آمالي أثناء قراءة متقدمة Windows التصحيح: الذاكرة الفساد الجزء II-أكوام ، وهو الفصل من متقدمة Windows التصحيح . أنا ركبت WinDbg ثم تحميل رموز التصحيح لuser32.dll، kernel32.dll، ntdll.dll وفقا ل http://support.microsoft. كوم / كيلو بايت / 311503 . الآن عندما يوقف البرنامج في المصحح أستطيع أن يصدر هذا الأمر لعرض معلومات حول الصفحة كومة:

0:000> dt _DPH_BLOCK_INFORMATION 19BE0CF8-0x20
ntdll!_DPH_BLOCK_INFORMATION
   +0x000 StartStamp       : 0xabcdaaaa
   +0x004 Heap             : 0x90c61000 
   +0x008 RequestedSize    : 0x10
   +0x00c ActualSize       : 0x38
   +0x010 FreeQueue        : _LIST_ENTRY [ 0x0 - 0x0 ]
   +0x010 TraceIndex       : 0
   +0x018 StackTrace       : (null) 
   +0x01c EndStamp         : 0xdcbaaaaa

وأشعر باستياء من أثر (null) المكدس. الآن، http://msdn.microsoft.com/ أون لنا / مكتبة / ms220938٪ 28VS.80٪ 29.aspx يقول:

<اقتباس فقرة>   

والحقل تتبع مكدس الذاكرة المؤقتة لن دائما تحتوي على قيمة غير فارغة لأسباب مختلفة. ويدعم أولا وقبل كل كشف تتبع مكدس فقط على منصات x86 و الثانية، حتى على الأجهزة إلى x86 خوارزميات الكشف تتبع مكدس ليست موثوقة تماما. إذا كانت كتلة كتلة المخصصة تتبع المكدس هو لحظة التخصيص. اذا اطلق سراح الكتلة، تتبع المكدس هو لحظة الحرة.

ولكن أنا أتساءل عما إذا كان أي شخص لديه أي أفكار على زيادة فرص رؤية تتبع المكدس من لحظة التخصيص.

وشكرا لقراءة!

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

المحلول

وآه ها! تبين لي اللازمة لتمكين المزيد من الخيارات gflags:

gflags /i myprogram.exe +ust

والتي لديها هذا التأثير:

ust - Create user mode stack trace database

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

gflags /i myprogram.exe /tracedb 512

... أو أيا كان (في MB).

نصائح أخرى

ووفقا لمايكروسوفت، دالة malloc في C وقت التشغيل (CRT) وحدة تستخدم إغفال إطار المؤشر (FPO) في بعض إصدارات ويندوز. لا تستطيع رؤية المعلومات كومة كاملة من دالة malloc. (http://support.microsoft.com/kb/268343)

وإذا كان ذلك ممكنا، في محاولة لربط التصحيح النسخة CRT، على سبيل المثال الارتباط مع الخيار / MDD، من أجل حل هذه المسألة.

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