تبسيط تحليل مقالب ذاكرة النوافذ أو قرص آخر لقائمة السياق

يواجه العديد من مستخدمي أنظمة تشغيل windows ، عاجلاً أم آجلاً ، الحاجة إلى معرفة سبب "سقوط نظام التشغيل المفضل لديهم في BSOD".

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



يمكن أن تؤدي التعديلات السيئة في قائمة السياق إلى تبسيط المهمة ، نظرًا لأنها تتم ببساطة شديدة.

تحضير
تحتاج أولاً إلى تثبيت الحزمة باستخدام مصحح أخطاء windbg.exe وإصدار وحدة التحكم من kd.exe والمحتويات الضرورية الأخرى.

هذه هي حزم X64 Debuggers And Tools-x64_ar-us.msi أو X86 Debuggers and Tools-x86_ar-us.msi للاختيار بناءً على عمق البت لنظام التشغيل المستخدم و / أو التفضيلات الشخصية.

لن تجد ارتباطات فردية على موقع Microsoft على الويب ، ولكن هذه الحزم هي جزء من Windows Driver Kit ، يمكنك تنزيلها دون تثبيتها عن طريق تحديد وضع التثبيت المناسب ، ستكون الحزم في المجلد \ Windows Kits \ 10 \ WDK \ Installers عند اكتمال التنزيل.

إذا احتاجها شخص ما ، قمت بتحميله بشكل منفصل إلى I. Disk:

أدوات تصحيح الأخطاء وأدواتها x64-x64_ar-us.msi
أدوات تصحيح الأخطاء وأدوات X86-x86_ar-us.msi

قررت عدم تثبيت المصحح ، ولكن فقط فك msi:

msiexec /a "D:\Desktop\X64 Debuggers And Tools-x64_en-us.msi" /qb targetdir="D:\Desktop\Temp" 

هذا الخيار "المحمول" أكثر من كاف. بعد ذلك ، لراحتك ، قمت بنقل المحتوى المطلوب من عدة مجلدات فرعية إلى C: \ Portable \ Debug ، بحيث اتضح :

C:\Portable\Debug\windbg.exe
C:\Portable\Debug\kd.exe


+ كل شيء آخر. سنبني على هذا المسار في المستقبل (بالإضافة إلى أنني أضفته إلى٪ PATH٪ مرة أخرى ، من أجل الراحة).

في هذا ، يمكن اعتبار التدابير التحضيرية مكتملة وتستمر لوصف عملية إنشاء قرص.

نظرًا لأن مهمتي تفترض وجود العديد من المقالب وغالبًا ما أحتاجها ، فأنا بحاجة إلى تسريع العملية قدر الإمكان ، مع جعلها مفيدة بما يكفي لإجراء تحليل سريع.

التعامل مع المفاتيح وأوامر المصحح


كأساس للتعديل المستقبلي ، دعنا نأخذ مثل هذا الملف الدفعي ، الذي يكفي لسحب التفريغ المطلوب.

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

 @echo off title text %1 mode con: cols=170 color F0 title "%1" kd.exe -nosqm -sup -z "%1" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -c ^ "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q"" pause exit /b 

هنا يمكنك رؤية المعلمات التي تم إرسالها بواسطة kd.exe ، مثل -y و -i و -z في الواقع ، والتي شاهدها كل من يعرف عن ملف kdfe.cmd والمعروف على نطاق واسع في الدوائر الضيقة.

 -i !ImagePath! specifies the location of the executables that generated the fault (see _NT_EXECUTABLE_IMAGE_PATH) -y !SymbolsPath! specifies the symbol search path (see _NT_SYMBOL_PATH) -z !CrashDmpFile! specifies the name of a crash dump file to debug 

إذا أخذناها بالتناظر مع التعليمات الشائعة ، فهناك اختلافات طفيفة: يتم تمرير nosqm و -sup أيضًا كحجج.

 -nosqm disables SQM data collection/upload. -sup enables full public symbol searches 

كفرق:

 !cpuid !sysinfo cpuinfo !sysinfo cpuspeed !sysinfo machineid 

لن أرسمها ، لأن الكثير من لصق النسخ سيخرج. سيتمكن أولئك المهتمون من العثور على المساعدة التفصيلية من debugger.chm في أي من اثنين * .msi المذكورة أعلاه أو على docs.microsoft.com -cpuid -sysinfo . باختصار ، معلومات أساسية عن غدة الضحية.

سيتحول إخراج البرنامج النصي باستخدام kd.exe إلى نفس النتيجة التي تم الحصول عليها عند العمل مباشرة من خلال windbg ، ولكن يتم تحقيق النتيجة بشكل أسرع حيث لا تحتاج إلى فتح أي شيء ، وتهيئة المجلدات ، وفتح التفريغ من خلال القائمة وإدخال الأوامر في مصحح الأخطاء.

تصفية إخراج القمامة من وحدة التحكم


في المثال الأول ، لنأخذ تفريغ ذاكرة لمستخدم عشوائي. هناك مشكلة صغيرة في القمامة في الإخراج:

لقطة شاشة لقطعة إخراج وحدة التحكم

تم العثور على هذا ، على سبيل المثال ، في مقالب المستخدمين الذين يستخدمون منشط أودين ، الذي نراه في هذا المثال.

الناتج الكامل ضخم جدًا ، بسبب الارتباط بـ pastebin .

مطلوب "تصفية" الأسطر غير الضرورية مع ترك المعلومات المفيدة فقط.
لقد استخدمت findstr ، فقد اتضح حلًا قبيحًا ولكنه يعمل:

 findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" 

يستخدم findstr هنا نظامين نظاميين: أحدهما يبحث عن خطوط تبدأ بثلاث علامات نجمية ومسافة واحدة وتنتهي بمسافة وثلاث نجوم. يبحث الثاني عن خطوط تبدأ بـ 14 نجمة. لم أستطع فعل أي شيء أكثر وضوحا مع findstr.

(لا أوصي باستخدام أحرف إنهاء السطر في إجراءات Findst على عادم kd.exe ، قد تكون هناك مشاكل في نوع نهاية السطر الذي يعرضه kd.exe. بدلاً من \ r \ n ، يمكنك الحصول على \ n أن findstr لا يعتبر نهاية السطر. مثل هذه أشعل النار بنفسك.)

تبين أن الرمز الكامل للملف الدفعي الأولي مع "الفلتر" هو:

 @echo off title text %1 mode con: cols=170 color F0 title "%1" kd.exe -nosqm -sup -z "%1" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols ^ -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" pause exit /b 

الإخراج الكامل للنسخة المصفاة هو أيضا على اللصق .

والنتيجة متشابهة ، ولكن بدون "قمامة". 290 سطرًا من النص مقابل 894. أفضل بالفعل ، ولكن ليس كل شيء.

إنشاء سجل المصحح السريع


الخطوة التالية هي إضافة سجل يمكن نشره أو إرساله إلى مكان ما.

للقيام بذلك ، قم بتمرير kd.exe الوسيطة -loga <"P: \ to \ log.log">
يأخذ الكود الشكل التالي:

 @echo off title text %1 mode con: cols=170 color F0 title "%1" set "D=%1" set L=%D:.dmp=.LOG% kd.exe -nosqm -sup -loga "%L%" -z "%D%" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols ^ -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" pause exit /b 

سيتم إنشاء سجل 102516-21949-01.LOG للملف 102516-21949-01.dmp في نفس المجلد مثل التفريغ نفسه.

في هذه الحالة ، لا تتم تصفية إخراج "القمامة" في السجل ، ويتم فقط تصفية الإخراج إلى وحدة التحكم ، ولكن في حالتي هذا ليس مهمًا ، على الرغم من أنه يمكنك إصلاحه بمسح السجل بعد الإنشاء:

 @echo off title text %1 mode con: cols=170 color F0 title "%1" set "D=%1" set L=%D:.dmp=.LOG% kd.exe -nosqm -sup -loga "%L%" -z "%D%" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols ^ -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" set CL=%L:.LOG=_CLEAN.LOG% type "%L%" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" >> "%CL%" del /f /q "%L%" pause exit /b 

فتح مكب في Windbg


الآن الخطوة الأخيرة بالترتيب ، ولكن ليس في الأهمية: تحتاج إلى أن تكون قادرًا على نقل التفريغ مباشرة إلى ملف windbg.exe وتمرير الأوامر على الفور التي ستحتاج على الأرجح إلى إدخالها. كل شيء يتم عن طريق القياس باستخدام kd.exe ، والوسيطات والأوامر التي يتم تلقيها بواسطة windbg.exe مماثلة تقريبًا لـ kd.exe

 @echo off windbg.exe -z "%1" -sup -y ^ "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -i "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid" exit /b 

ونتيجة لذلك ، سيتم فتح التفريغ على الفور في مصحح الأخطاء وسيتم تنفيذ الأوامر المدرجة في المفتاح -c تلقائيًا فيه.

الاستنتاج مشابه للخيار الأول مع اختلاف فتح التفريغ على الفور في windbg ، فمن الممكن إدخال أوامر لمزيد من التحليل بسبب غياب الأمر q في قائمة الأوامر المرسلة.

(بالمناسبة ، إذا قمت في الإصدارات السابقة من البرنامج النصي باستخدام kd.exe بإزالة الأمر q الذي تم تمريره في قائمة الأوامر عبر الوسيطة -c ، فستظهر القدرة على مواصلة العمل مع التفريغ ، بما في ذلك تسجيل السجل مباشرة في العملية.)

القرص الخلق


الآن يجب تعديل كل هذا حتى تتمكن من ربط ملفات * .dmp بقائمة السياق. في الواقع ، على ما كان عليه.

فيما يلي "الخطوط الواحدة" التالية:

للخيار مع تصفية إخراج وحدة التحكم

 cmd /d /k mode con: cols=170 & color F0 & title "%1" & kd.exe -nosqm -sup -z "%1" -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" 

للخيار مع تصفية إخراج وحدة التحكم وإنشاء ملف سجل
(يجب استخدام ملحق متغير مؤجل )

 cmd /d /v /k mode con: cols=170 & color F0 & title "%1" & set "D=%1"& set L=!D:.dmp=.LOG! & kd.exe -nosqm -sup -loga "!L!" -z "!D!" -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" 

لفتح ملف تفريغ مباشرة في ملف windbg.exe

 "C:\Portable\Debug\windbg.exe" -z "%1" -sup -y "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -i "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid" 

في التسجيل ، قمت بإنشاء بنية القسم التالية:



تم إنشاء نوع منفصل من ملف dmp_geek في مفاتيح التسجيل التي تم إجراء التغييرات عليها. الملفات ذات الامتداد * .dmp تم تخصيص ملفات من نوع dmp_geek .

في كل قسم أمر ، تمت إضافة السطر المطابق + السمة المقابلة في شكل رموز وأسماء ملائمة لأسماء العناصر المعروضة في قائمة السياق إلى معلمة السلسلة بشكل افتراضي.



اتضح أنه قرص يضيف القدرة على فتح مقالب مختارة بشكل كبير في المجلد في وحدة التحكم وفي مصحح الأخطاء مع تصفية "القمامة" وإنشاء سجلات لكل تفريغ حسب الضرورة. إنه يوفر الكثير من الوقت.

بعد تمشيط التسجيل ، تم تصدير كل شيء إلى ملف REG النهائي جاهز للاستخدام.

محتويات ملف REG
 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.dmp] @="dmp_geek" [HKEY_CLASSES_ROOT\dmp_geek] @="dmp_geek" "FriendlyTypeName"=" " [HKEY_CLASSES_ROOT\dmp_geek\DefaultIcon] @="imageres.dll,142" [HKEY_CLASSES_ROOT\dmp_geek\shell] [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe] "MUIVerb"="Kd.exe" "Icon"="C:\\Portable\\Debug\\windbg.exe,6" [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe\command] @="cmd /d /k mode con: cols=170 & color F0 & title \"%1\" & \"C:\\Portable\\Debug\\kd.exe\" -nosqm -sup -z \"%1\" -y srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -i srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -c \"!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q\" | findstr /r /v /c:\"^\\*\\*\\* .* \\*\\*\\*\" /c:\"^\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*.*\"" [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe_-loga] "MUIVerb"="Kd.exe -loga" "Icon"="C:\\Portable\\Debug\\windbg.exe,6" [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe_-loga\command] @="cmd /d /v /k mode con: cols=170 & color F0 & title \"%1\" & set \"D=%1\"& set L=!D:.dmp=.LOG! & \"C:\\Portable\\Debug\\kd.exe\" -nosqm -sup -loga \"!L!\" -z \"!D!\" -y srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -i srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -c \"!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q\" | findstr /r /v /c:\"^\\*\\*\\* .* \\*\\*\\*\" /c:\"^\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*.*\"" [HKEY_CLASSES_ROOT\dmp_geek\shell\Open] "MUIVerb"="Windbg" "Icon"="C:\\Portable\\Debug\\windbg.exe,6" [HKEY_CLASSES_ROOT\dmp_geek\shell\Open\command] @="\"C:\\Portable\\Debug\\windbg.exe\" -z \"%1\" -sup -y \"srv*C:\\Symbols*http://msdl.microsoft.com/download/symbols\" -i \"srv*C:\\Symbols*http://msdl.microsoft.com/download/symbols\" -c \"!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid\"" 

→ تنزيل من Ya.Disk GEEK_DMP.reg

هذا كل شيء. يمكنك الآن بسرعة ، وإن كان بشكل سطحي ، تحليل مجموعة من المقالب على الفور.

Source: https://habr.com/ru/post/ar409397/


All Articles