A Bug Meets a Bug (The Clash of Civilizations)
January 28th, 2012
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -

- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Advanced training sessions time may not suitable due to different geographic time zones. So I have decided to publish this training in a book format (currently in PDF) and make it available in paperback on Amazon and B&N later. Book details:

Now available for sale in PDF format from Memory Dump Analysis Services.
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
As always, if I’m asked to do something, I don’t stop there and apply all my accumulated knowledge to go beyond. Here is an example: after designing 2CARE2 trademark I imagined an organic creature that catches bugs:

If you compare it with a trademark you would recognize A, R and E as Phenyl, Methyl, and Ethyl groups.
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Memory Dump Analysis Services started working on 2CARE2 system (Crash Analysis Report Environment, 2nd generation) and asked me to design a trademark. My Chemistry background (I like Organic Chemistry most) and imagination led me to represent client and server parts holistically as an aromatic-like compound:

- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Having done in the past with user space raw stack data analysis for 32-bit complete memory dumps I found today the need to look at kernel raw stack data from all threads and created this fast script:
!for_each_thread "!thread @#Thread; r? $t1 = ((nt!_KTHREAD *) @#Thread )->StackLimit; r? $t2 = ((nt!_KTHREAD *) @#Thread )->InitialStack; dps @$t1 @$t2"
It can be run for kernel and complete memory dumps from both x86 and x64 systems. If you need to have correct symbolic mapping for user space in kernel space data you need to modify it a bit and it will be slower to run.
!for_each_thread "!thread @#Thread ff; .thread /r /p @#Thread; r? $t1 = ((nt!_KTHREAD *) @#Thread )->StackLimit; r? $t2 = ((nt!_KTHREAD *) @#Thread )->InitialStack; dps @$t1 @$t2"
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
I have discovered that Romantic era music is good for debugging, memory dump and software trace analysis sessions. Previously I included Beethoven and now suggest to listen to Schumann. For a starter you can try this album: Schumann: Symphonies Nos. 1-4
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
3 bugtations in a column:
Every debugger I know has trouble debugging.
Talent is helpful in debugging, but guts are absolutely necessary.
With failure comes a dump.
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Here’s what we see from our Google Analytics stats. Top 5 browsers in 2011 used to access our portal and blog:
| Browser |
Visits |
| Internet Explorer |
82,334 |
| Firefox |
76,880 |
| Chrome |
57,275 |
| Opera |
9,776 |
| Safari |
6,197 |
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Here’s what we see from our Google Analytics stats. Top 25 mobile devices in 2011 used to access our portal and blog:
| Mobile Device Info |
Visits |
| Apple iPhone |
599 |
| Apple iPad |
467 |
| (not set) |
415 |
| Apple iPod Touch |
41 |
| Samsung GT-I9100 Galaxy S II |
30 |
| HTC Desire HD |
20 |
| Motorola DroidX |
19 |
| SonyEricsson LT15i Xperia Arc |
18 |
| HTC Desire |
16 |
| Motorola Xoom |
12 |
| Verizon Droid |
12 |
| Google Nexus One |
9 |
| HTC EVO 4G |
9 |
| Samsung Nexus S |
8 |
| Nokia E63 |
7 |
| Samsung GT-I9000 Galaxy S |
7 |
| Huawei IDEOS S7 |
6 |
| Samsung SHW-M130L Galaxy U |
6 |
| HTC ADR6300 Incredible |
5 |
| Motorola A953 MILESTONE 2 |
5 |
| Motorola Droid 2 |
5 |
| RIM BlackBerry 8530 Curve |
5 |
| Samsung Galaxy Tab |
5 |
| Samsung GT-P7510 Galaxy Tab 10.1 |
5 |
| Samsung SWH-M110S |
5 |
Top 10 mobile operating systems:
| Operating System |
Visits |
| iPhone |
1,078 |
| iPad |
827 |
| Android |
628 |
| iPod |
75 |
| BlackBerry |
54 |
| Nokia |
23 |
| SymbianOS |
15 |
| Windows Phone |
13 |
| Windows |
8 |
| Samsung |
4 |
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
According to Google Analytics the number of visits / year increased by 4% since 2010 with almost 160,000 unique visitors (2% increase) from 180 countries and 34% of them are coming back. 2,725 visits were via 12 mobile operating systems (106% increase). Here are the top 100 network locations out of 28,932:
| Service Provider |
Visits |
| microsoft corp |
5,292 |
| comcast cable communications inc. |
3,596 |
| internet service provider |
3,509 |
| road runner holdco llc |
3,314 |
| verizon online llc |
2,597 |
| comite gestor da internet no brasil |
2,557 |
| hewlett-packard company |
2,546 |
| ip pools |
2,222 |
| deutsche telekom ag |
2,160 |
| japan network information center |
2,109 |
| chunghwa telecom data communication business group |
1,632 |
| intel corporation |
1,518 |
| uunet non-portable customer assignment |
1,312 |
| qwest communications company llc |
1,202 |
| symantec corporation |
1,170 |
| charter communications |
1,110 |
| at&t internet services |
1,108 |
| emc corporation |
1,099 |
| network of citrix systems inc |
1,093 |
| broadband multiplay project o/o dgm bb noc bsnl bangalore |
1,063 |
| abts (karnataka) |
1,043 |
| comcast cable communications holdings inc |
986 |
| eircom |
919 |
| this space is statically assigned. |
918 |
| chinanet guangdong province network |
900 |
| cox communications |
896 |
| korea telecom |
895 |
| proxad / free sas |
886 |
| comcast business communications llc |
845 |
| tw telecom holdings inc. |
825 |
| china unicom beijing province network |
816 |
| psinet inc. |
811 |
| kaspersky lab internet |
734 |
| telstra internet |
716 |
| chinanet shanghai province network |
664 |
| comcast cable communications |
652 |
| honeywell international inc. |
641 |
| cisco systems inc. |
637 |
| shaw communications inc. |
629 |
| cox communications inc. |
627 |
| xo communications |
618 |
| ntt communications corporation |
604 |
| optimum online (cablevision systems) |
597 |
| microsoft |
595 |
| symantec |
590 |
| krnic |
589 |
| citrix systems inc. |
571 |
| chtd chunghwa telecom co. ltd. |
557 |
| telefonica de espana sau |
547 |
| this space is statically assigned |
543 |
| dynamic ip pool for broadband customers |
538 |
| frontier communications of america inc. |
523 |
| computer associates international |
501 |
| appense |
479 |
| telus communications inc. |
473 |
| unknown |
473 |
| research in motion limited |
469 |
| singnet pte ltd |
458 |
| customers ie |
457 |
| arcor ag |
454 |
| chinanet jiangsu province network |
448 |
| sympatico hse |
445 |
| suddenlink communications |
435 |
| nib (national internet backbone) |
429 |
| comcast cable communications ip services |
426 |
| rcs & rds s.a. |
425 |
| dynamic pools |
421 |
| siemens ag |
419 |
| mcafee inc. |
410 |
| iinet limited |
409 |
| smart comp. a.s. |
406 |
| eset s.r.o. |
400 |
| tpg internet pty ltd. |
393 |
| ziggo consumers |
390 |
| ncc#2011011865 approved ip assignment |
383 |
| ibm india private limited |
373 |
| abts tamilnadu |
355 |
| pt telkom indonesia |
340 |
| tata teleservices ltd - tata indicom - cdma division |
336 |
| pacnet services (japan) corp. |
334 |
| opera software asa |
333 |
| core ip development |
332 |
| easynet ltd |
327 |
| mcafee |
313 |
| global crossing |
312 |
| uecomm |
311 |
| wipro technologies |
310 |
| mtnl cat b isp |
306 |
| upc polska sp. z o.o. |
305 |
| integra telecom inc. |
304 |
| videotron ltee |
299 |
| network of ign arch. and design gb |
297 |
| rcom-wireless-hsd-mumbai |
292 |
| scansafe inc. |
292 |
| hutchison global communications |
285 |
| upc slovakia |
279 |
| gesti n de direccionamiento uninet |
278 |
| bellsouth.net inc. |
277 |
| starhub cable vision ltd |
271 |
| las colinas microsoft |
268 |
Top 25 visiting countries:
| Country/Territory |
Visits |
| United States |
67,799 |
| India |
22,266 |
| United Kingdom |
17,258 |
| Russia |
11,094 |
| Germany |
10,244 |
| China |
8,928 |
| Canada |
7,569 |
| France |
5,551 |
| Japan |
4,944 |
| Australia |
4,792 |
| South Korea |
4,279 |
| Taiwan |
3,845 |
| Ukraine |
3,315 |
| Netherlands |
3,176 |
| Israel |
2,791 |
| Poland |
2,781 |
| Brazil |
2,773 |
| Italy |
2,701 |
| Spain |
2,623 |
| Ireland |
2,592 |
| Romania |
2,391 |
| Czech Republic |
2,359 |
| Singapore |
2,307 |
| Sweden |
2,255 |
| Finland |
1,800 |
More than 8,000 portal and blog pages were viewed a total of more than 392,000 times with top 100 content pages:
| Page |
Pageviews |
| / |
39,456 |
| /blog/ |
30,649 |
| /blog/index.php/2007/06/20/crash-dump-analysis-checklist/ |
7,596 |
| /blog/index.php/category/windbg-tips-and-tricks/ |
7,406 |
| /blog/index.php/2008/01/10/what-is-kifastsystemcallret/ |
5,553 |
| /blog/index.php/2008/09/12/adplus-in-21-seconds-and-13-steps/ |
4,179 |
| /blog/index.php/2007/07/20/crash-dump-analysis-patterns-part-17/ |
3,712 |
| /blog/index.php/category/minidump-analysis/ |
3,393 |
| /blog/index.php/category/windows-7/ |
3,012 |
| /blog/index.php/2007/09/17/resolving-symbol-file-could-not-be-found/ |
2,932 |
| /blog/index.php/2007/09/06/minidump-analysis-part-2/ |
2,859 |
| /Tools |
2,632 |
| /Memory+Dump+Analysis+Anthology+Volume+5 |
2,507 |
| /blog/index.php/category/windbg-scripts/ |
2,444 |
| /ru/blog/ |
2,337 |
| /blog/index.php/category/windows-server-2008/ |
2,262 |
| /blog/index.php/2008/03/13/crash-dump-analysis-patterns-part-2b/ |
2,196 |
| /blog/index.php/2006/10/31/crash-dump-analysis-patterns-part-2/ |
2,182 |
| /blog/index.php/2008/04/22/bugchecks-system_service_exception/ |
2,073 |
| /blog/index.php/2007/09/11/crash-dump-analysis-patterns-part-26/ |
1,998 |
| /blog/index.php/2008/01/24/crash-dump-analysis-patterns-part-43/ |
1,986 |
| /blog/index.php/2007/04/03/crash-dump-analysis-patterns-part-11/ |
1,960 |
| /blog/index.php/2007/10/11/minidump-analysis-part-4/ |
1,938 |
| /blog/index.php/category/gdb-for-windbg-users/ |
1,928 |
| /blog/index.php/2006/12/09/clipboard-issues-explained/ |
1,922 |
| /blog/index.php/about/ |
1,863 |
| /blog/index.php/2006/10/30/crash-dump-analysis-patterns-part-1/ |
1,803 |
| /FCMDA-book |
1,800 |
| /mda-learning-speed |
1,793 |
| /blog/index.php/2007/02/02/crash-dump-analysis-patterns-part-8/ |
1,753 |
| /Memory+Dump+Analysis+Anthology+Volume+1 |
1,746 |
| /blog/index.php/2007/04/25/bugchecks-system_thread_exception_not_handled/ |
1,712 |
| /blog/index.php/2007/02/09/crash-dump-analysis-patterns-part-9a/ |
1,705 |
| /blog/index.php/2007/08/06/crash-dump-analysis-patterns-part-20a/ |
1,661 |
| /blog/index.php/category/windbg-tips-and-tricks/page/2/ |
1,661 |
| /blog/index.php/2008/03/12/bug-check-frequencies/ |
1,646 |
| /blog/index.php/2007/10/17/crash-dump-analysis-patterns-part-31/ |
1,615 |
| /blog/index.php/2007/03/04/windbg-tips-and-tricks-analyzing-hangs-faster/ |
1,605 |
| /blog/index.php/basic-windows-crash-dump-analysis/ |
1,600 |
| /blog/index.php/2007/07/15/interrupts-and-exceptions-explained-part-4/ |
1,591 |
| /blog/index.php/category/bugchecks-depicted/ |
1,584 |
| /blog/index.php/2007/08/29/minidump-analysis-part-1/ |
1,508 |
| /blog/index.php/2008/06/12/crash-dump-analysis-patterns-part-59b/ |
1,479 |
| /blog/index.php/crash-dump-analysis-patterns/ |
1,456 |
| /blog/index.php/2008/03/08/time-travel-debugging/ |
1,453 |
| /ru/blog/index.php/category/komandy-otladchika-windbg/ |
1,420 |
| /WinDbg+reference |
1,396 |
| /blog/index.php/crash-dump-examples/ |
1,358 |
| /advanced-software-debugging-reference |
1,347 |
| /blog/index.php/category/windbg-tips-and-tricks/page/6/ |
1,317 |
| /ru/blog/index.php/page/2/ |
1,314 |
| /blog/index.php/2010/01/08/live-kernel-debugging-of-a-system-freeze-case-study/ |
1,298 |
| /Forthcoming+Windows+Debugging+Notebook |
1,285 |
| /Crash+Dump+Analysis+for+System+Administrators |
1,278 |
| /blog/index.php/2007/03/03/windbg-tips-and-tricks-hypertext-commands/ |
1,240 |
| /accelerated-windows-memory-dump-analysis |
1,191 |
| /blog/index.php/2007/06/21/crash-dump-analysis-patterns-part-16a/ |
1,178 |
| /blog/index.php/category/cartoons/ |
1,157 |
| /blog/index.php/category/windbg-tips-and-tricks/page/7/ |
1,128 |
| /blog/index.php/2008/06/26/heuristic-stack-trace-in-windbg-693113/ |
1,114 |
| /blog/index.php/2007/12/17/crash-dump-analysis-patterns-part-41b/ |
1,106 |
| /blog/index.php/category/mac-crash-corner/ |
1,082 |
| /blog/index.php/2007/05/19/resurrecting-dr-watson-on-vista/ |
1,036 |
| /blog/index.php/category/bugchecks-depicted/page/2/ |
976 |
| /blog/index.php/2007/02/10/crash-dump-analysis-in-visual-studio-2005/ |
947 |
| /blog/index.php/category/dump-analysis/ |
937 |
| /blog/index.php/2008/05/09/windbg-cheat-sheet-for-crash-dump-analysis/ |
931 |
| /arts-photography-links |
917 |
| /blog/index.php/2008/04/03/crash-dump-analysis-patterns-part-57/ |
915 |
| /blog/index.php/2007/06/21/repair-clipboard-chain-201/ |
880 |
| /blog/index.php/automated-analysis/ |
848 |
| /blog/index.php/2007/07/25/reconstructing-stack-trace-manually/ |
844 |
| /Forthcoming+Windows+Debugging:+Practical+Foundations |
841 |
| /Memory+Dump+Analysis+Anthology+Volume+4 |
831 |
| /blog/index.php/2007/09/ |
828 |
| /blog/index.php/2007/09/14/crash-dump-analysis-patterns-part-27/ |
819 |
| /museum-debugging |
813 |
| /blog/index.php/dumps-for-dummies/ |
810 |
| /blog/index.php/2007/08/19/crash-dump-analysis-patterns-part-23a/ |
807 |
| /blog/index.php/2007/08/04/visualizing-memory-dumps/ |
797 |
| /blog/index.php/2007/11/02/crash-dump-analysis-patterns-part-13c/ |
785 |
| /blog/index.php/2008/01/02/how-to-distinguish-between-1st-and-2nd-chances/ |
784 |
| /blog/index.php/2008/05/08/stl-and-windbg/ |
780 |
| /blog/index.php/2007/05/20/custom-postmortem-debuggers-on-vista/ |
764 |
| /blog/index.php/2007/10/01/windows-service-crash-dumps-on-vista/ |
760 |
| /blog/index.php/category/linux-crash-corner/ |
748 |
| /blog/index.php/memory-dump-analysis-interview-questions/ |
746 |
| /blog/index.php/2007/12/19/crash-dump-analysis-patterns-part-42b/ |
723 |
| /blog/index.php/2007/10/30/object-names-and-waiting-threads/ |
720 |
| /blog/index.php/2006/10/09/dumps-for-dummies-part-1/ |
700 |
| /blog/index.php/category/windbg-scripts/page/2/ |
693 |
| /node?page=1 |
687 |
| /Forthcoming+Memory+Dump+Analysis+Anthology+Volume+2 |
686 |
| /blog/index.php/2006/10/ |
680 |
| /blog/index.php/2008/10/15/crash-dump-analysis-patterns-part-1b/ |
680 |
| /blog/index.php/2006/11/01/crash-dump-analysis-patterns-part-3/ |
677 |
| /blog/index.php/2007/12/12/crash-dump-analysis-patterns-part-41a/ |
676 |
| /blog/index.php/category/net-debugging/ |
675 |
| /blog/index.php/2007/07/15/crash-dump-analysis-patterns-part-13b/ |
674 |
| /blog/index.php/category/windbg-scripts/page/3/ |
667 |
More than 70,000 Google search keywords pointed to the portal and this blog with 100 most frequent (some are in Russian):
| Keyword |
Visits |
| crash dump |
2,485 |
| crash dump analysis |
2,042 |
| kifastsystemcallret |
1,881 |
| nt!_gshandlercheck_seh |
1,111 |
| adplus |
1,099 |
| dump analysis |
894 |
| ntdll!kifastsystemcallret |
640 |
| windbg |
595 |
| bugcheck 3b |
570 |
| win32 error 0n2 |
551 |
| memory dump analysis |
526 |
| symbol file could not be found |
405 |
| windbg commands |
393 |
| dmitry vostokov |
385 |
| dumpanalysis.org |
361 |
| fnodobfm |
361 |
| system_thread_exception_not_handled |
338 |
| adplus download |
336 |
| crash dump analyzer |
328 |
| crash dump windows 7 |
326 |
| windbg crash dump analysis |
320 |
| kisystemservicecopyend |
317 |
| idna trace |
306 |
| dumpanalysis |
301 |
| minidump analysis |
288 |
| warning: frame ip not in any known module. following frames may be wrong. |
264 |
| crash dumps |
253 |
| windows 7 crash dump |
250 |
| crashdump |
244 |
| frame ip not in any known module |
239 |
| adplus tutorial |
237 |
| memory dump analysis anthology |
235 |
| core dump analysis |
224 |
| windbg script |
217 |
| kiuserexceptiondispatcher |
213 |
| application_fault_status_breakpoint |
211 |
| pool corruption |
192 |
| exception_double_fault |
189 |
| basethreadinitthunk |
188 |
| анализ дампа памяти |
187 |
| getcontextstate failed, 0xd0000147 |
184 |
| ntdll kifastsystemcallret |
184 |
| nngakegl |
180 |
| memory dump analysis tool |
179 |
| analyze minidump |
177 |
| error: symbol file could not be found |
176 |
| dump analyzer |
175 |
| kernel_mode_exception_not_handled |
174 |
| rtlpwaitoncriticalsection |
174 |
| trap frame |
174 |
| дамп памяти |
173 |
| getcontextstate failed, 0×80070026 |
171 |
| windows crash dump analysis |
170 |
| windbg analyze |
168 |
| system_service_exception |
167 |
| frame pointer omission |
161 |
| minidump analyzer |
156 |
| obfreferenceobject |
155 |
| “this book fills the gap in children’s literature and introduces binary arithmetic to babies” |
154 |
| life cycle of a beetle |
152 |
| string theory |
148 |
| отладка windows dump |
143 |
| application_hang_blockedon_fileio |
142 |
| bugcheck 7e |
139 |
| image dump analysis visual studio |
139 |
| ntdll.dll!kifastsystemcallret |
138 |
| windbg cheat sheet |
138 |
| msmapi32.dll!fopenthreadimpersonationtoken |
130 |
| windbg debugging using vmware mac osx |
128 |
| download adplus |
127 |
| memory worldview |
127 |
| waitformultiple windbg???? |
127 |
| rtlplowfragheapfree |
125 |
| application_hang_busyhang |
124 |
| symbol file could not be found. defaulted to export symbols for fltmgr.sys |
121 |
| error: symbol file could not be found. defaulted to export symbols for ntkrnlmp.exe |
120 |
| unwindandcontinuerethrowhelperaftercatch |
120 |
| анализ дампа памяти ядра |
120 |
| bugcheck analysis |
118 |
| ntdll dbgbreakpoint |
117 |
| error: symbol file could not be found. |
116 |
| windows debugging: practical foundations |
116 |
| !cs windbg |
113 |
| bios disassembly ninjutsu uncovered |
112 |
| kipagefault |
110 |
| pool_corruption |
110 |
| windbg symbol file could not be found |
109 |
| crash dump analysis windbg |
108 |
| linux crash dump analysis |
105 |
| warning: stack unwind information not available. following frames may be wrong. |
104 |
| zwwaitforworkviaworkerfactory |
104 |
| failure_bucket_id |
103 |
| system_thread_exception_not_handled (7e) |
103 |
| the stored exception information can be accessed via .ecxr. |
103 |
| анализ дампов памяти |
103 |
| dump crash |
101 |
| ldrpsnapthunk |
101 |
| the stored exception information can be accessed via .ecxr |
101 |
| windbg !locks |
100 |
| windbg gs:[58h] |
100 |
Special thanks to more 1,000 web sites that mention the portal and this blog with the first top 100:
| Source/Medium |
Visits |
|
152,133 |
|
| (direct) / (none) |
34,419 |
| bing |
6,847 |
| windbg.org |
5,106 |
| google.com |
4,904 |
| google.co.in |
2,576 |
| stackoverflow.com |
1,713 |
| yandex |
1,614 |
| dumpanalysis.com |
1,577 |
| twitter.com |
1,229 |
| baike.baidu.com |
1,165 |
| yahoo |
1,157 |
| t.co |
709 |
| blogs.msdn.com |
665 |
| google.co.uk |
609 |
| dumpanalysis.org |
574 |
| baidu |
560 |
| facebook.com |
558 |
| google.de |
502 |
| winvistaclub.com |
442 |
| naver |
419 |
| google.ca |
394 |
| search |
373 |
| linkedin.com |
356 |
| google.ru |
311 |
| google.com.au |
296 |
| citrixblogger.org |
277 |
| en.wikipedia.org |
257 |
| reconstructer.org |
256 |
| analyze-v.com |
252 |
| debuggingexperts.com |
250 |
| itdatabase.com |
250 |
| windbg.dumpanalysis.org |
230 |
| advancedwindowsdebugging.com |
226 |
| nynaeve.net |
225 |
| google.com.br |
209 |
| blog.miniasp.com |
208 |
| google.fr |
200 |
| google.it |
181 |
| google.com.hk |
180 |
| advanceddotnetdebugging.com |
172 |
| blogs.microsoft.co.il |
171 |
| community.citrix.com |
166 |
| google.co.kr |
165 |
| google.es |
152 |
| social.technet.microsoft.com |
149 |
| google.pl |
142 |
| google.nl |
140 |
| google.com.ua |
136 |
| serverfault.com |
125 |
| google.com.tw |
123 |
| google.com.tr |
118 |
| bytetalk.net |
114 |
| google.co.jp |
107 |
| forum.sysinternals.com |
105 |
| blog.naver.com |
104 |
| google.be |
98 |
| reddit.com |
97 |
| google.com.sg |
95 |
| google.co.il |
93 |
| google.ch |
91 |
| jasonhaley.com |
87 |
| netfxharmonics.com |
87 |
| google.ie |
83 |
| support.citrix.com |
83 |
| advdbg.org |
81 |
| google.se |
80 |
| google.com.pk |
77 |
| saygoodnight.com |
76 |
| google.ro |
75 |
| blogs.technet.com |
74 |
| news.ycombinator.com |
74 |
| google.co.za |
73 |
| driverentry.com.br |
72 |
| google.co.nz |
69 |
| google.cz |
68 |
| admin.itdatabase.com |
66 |
| codemachine.com |
66 |
| rambler |
66 |
| ask |
63 |
| dotnettips.info |
63 |
| google.at |
63 |
| pchelpforum.com |
63 |
| techspot.com |
62 |
| google.com.my |
61 |
| images.google |
61 |
| my.safaribooksonline.com |
60 |
| opentask.com |
60 |
| voneinem-windbg.blogspot.com |
60 |
| google.com.ph |
58 |
| google.no |
55 |
| google.gr |
54 |
| ja.iphone.luna.tv |
53 |
| kaixin001.com |
53 |
| aol |
52 |
| google.co.id |
52 |
| networksteve.com |
52 |
| caloni.com.br |
51 |
| google.com.ar |
51 |
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
This book I bought in a local Costa bookshop and found it was written by an Irish sociologist Kieran Allen. Shortly before my interest in Marxism was inspired by seeing a link to Irish communist party website and socialist bookshop in a booklet for Dublin Culture nights festival. It was a bit funny to see communists as part of Irish culture festival especially for me from former Soviet Union. Anyway, later I saw on streets that Marxist festivals are popular in Ireland nowadays. So let’s go back to the book. I found it very good and even lucid in explaining various Marxist ideas and vocabulary. A good start for more advance reading such as “Capital” (I have all 3 hardcover volumes from an Indian publisher and plan to have leather bound edition from Russia if I have enough surplus and MEW German edition) or specialized books such as “A Dictionary of Marxist Thought”. What I also tend to agree with the author is that Stalinism is a mirror of Capitalism (there is also a book “Magnetic Mountain: Stalinism as a Civilization” that I’m reading). I leave an application of a dialectical method of double negation to a reader here. Now the weak points of the book: 1) it doesn’t cover post-Stalinist era; 2) subsequent analysis of alternatives sounds a bit naive for me who really lived in socialism and can compare it to capitalism both in post-socialist country and now living in real capitalist country. The book also has a good reading suggestion list and I even thinking now on reading Voloshinov book “Marxism and the Philosophy of Language” (in Russian, although there is an English edition). Anyway, I would recommend Kieran’s book with reservations (about alternatives) as a first introduction to Marxist thought.
Marx and the Alternative to Capitalism
- Dmitry Vostokov @ LiterateScientist.com -
In addition to stack trace collections for threads (unmanaged, managed and predicate) we introduce an additional pattern for I/O requests. Such requests are implemented via the so called I/O request packets (IRP) that “travel” from a device driver to a device driver similar to a C++ class method to another C++ class method (where a device object address is similar to a C++ object instance address). An IRP stack is used to keep a track of the current driver which is processing an IRP that is reused between device drivers. Its is basically an array of structures describing how a particular driver function was called with appropriate parameters similar to a call frame on an execution thread stack. Long time ago I created an UML diagram depicting the flow of an IRP through the driver (device) stack (diagram #3). An I/O stack location pointer is decremented (from the bottom to the top) like a thread stack pointer (ESP or RSP). We can list active and completed I/O requests with their stack traces using !irpfind -v WinDbg command:
1: kd> !irpfind -v
Scanning large pool allocation table for Tag: Irp? (832c7000 : 833c7000)
Irp [ Thread ] irpStack: (Mj,Mn) DevObj [Driver] MDL Process
8883dc18: Irp is active with 1 stacks 1 is current (= 0x8883dc88)
No Mdl: No System Buffer: Thread 888f8950: Irp stack trace.
cmd flg cl Device File Completion-Context
>[ d, 0] 5 1 88515ae8 888f82f0 00000000-00000000 pending
\FileSystem\Npfs
Args: 00000000 00000000 00110008 00000000
891204c8: Irp is active with 1 stacks 1 is current (= 0x89120538)
No Mdl: No System Buffer: Thread 889635b0: Irp stack trace.
cmd flg cl Device File Completion-Context
>[ 3, 0] 0 1 88515ae8 84752028 00000000-00000000 pending
\FileSystem\Npfs
Args: 0000022a 00000000 00000000 00000000
89120ce8: Irp is active with 1 stacks 1 is current (= 0x89120d58)
No Mdl: No System Buffer: Thread 89212030: Irp stack trace.
cmd flg cl Device File Completion-Context
>[ 3, 0] 0 1 88515ae8 8921be00 00000000-00000000 pending
\FileSystem\Npfs
Args: 0000022a 00000000 00000000 00000000
Searching NonPaged pool (80000000 : ffc00000) for Tag: Irp?
[...]
892cbe48: Irp is active with 9 stacks 9 is current (= 0x892cbfd8)
No Mdl: No System Buffer: Thread 892add78: Irp stack trace.
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[ c, 2] 0 1 8474a020 892c8c80 00000000-00000000 pending
\FileSystem\Ntfs
Args: 00000800 00000002 00000000 00000000
892daa88: Irp is active with 4 stacks 4 is current (= 0x892dab64)
No Mdl: System buffer=831559c8: Thread 8322c8e8: Irp stack trace.
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[ e,2d] 5 1 884ba750 83190c40 00000000-00000000 pending
\Driver\AFD
Args: 890cbc44 890cbc44 88e55297 8943b6c8
892ea4e8: Irp is active with 4 stacks 4 is current (= 0x892ea5c4)
No Mdl: No System Buffer: Thread 00000000: Irp stack trace. Pending has been returned
cmd flg cl Device File Completion-Context
[ 0, 0] 0 2 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 c0000185
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ f, 0] 0 2 83a34bb0 00000000 84d779ed-88958050
\Driver\atapi CLASSPNP!ClasspMediaChangeDetectionCompletion
Args: 88958050 00000000 00000000 83992d10
>[ 0, 0] 2 0 891ee030 00000000 00000000-00000000
\Driver\cdrom
Args: 00000000 00000000 00000000 00000000
8933fcb0: Irp is active with 1 stacks 1 is current (= 0x8933fd20)
No Mdl: No System Buffer: Thread 84753d78: Irp stack trace.
cmd flg cl Device File Completion-Context
>[ 3, 0] 0 1 88515ae8 84759f40 00000000-00000000 pending
\FileSystem\Npfs
Args: 0000022a 00000000 00000000 00000000
893cf550: Irp is active with 1 stacks 1 is current (= 0x893cf5c0)
No Mdl: No System Buffer: Thread 888fd3b8: Irp stack trace.
cmd flg cl Device File Completion-Context
>[ 3, 0] 0 1 88515ae8 834d30d0 00000000-00000000 pending
\FileSystem\Npfs
Args: 00000400 00000000 00000000 00000000
893da468: Irp is active with 6 stacks 7 is current (= 0x893da5b0)
Mdl=892878f0: No System Buffer: Thread 00000000: Irp is completed. Pending has been returned
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ f, 0] 0 0 84b3e028 00000000 9747fcd0-00000000
\Driver\usbehci USBSTOR!USBSTOR_CswCompletion
Args: 00000000 00000000 00000000 00000000
[ f, 0] 0 0 892ba8f8 00000000 84d780ce-8328e0f0
\Driver\USBSTOR CLASSPNP!TransferPktComplete
Args: 00000000 00000000 00000000 00000000
893efb00: Irp is active with 10 stacks 11 is current (= 0x893efcd8)
Mdl=83159378: No System Buffer: Thread 82b7f828: Irp is completed. Pending has been returned
cmd flg cl Device File Completion-Context
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 0, 0] 0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[ 3, 0] 0 0 885a55b8 00000000 81614138-00000000
\Driver\disk partmgr!PmReadWriteCompletion
Args: 00000000 00000000 00000000 00000000
[ 3, 0] 0 0 89257c90 00000000 8042e4d4-831caab0
\Driver\partmgr volmgr!VmpReadWriteCompletionRoutine
Args: 00000000 00000000 00000000 00000000
[ 3, 0] 0 0 831ca9f8 00000000 84dad0be-00000000
\Driver\volmgr ecache!EcDispatchReadWriteCompletion
Args: 00000000 00000000 00000000 00000000
[ 3, 0] 0 0 8319c020 00000000 84dcc4d4-8576f8ac
\Driver\Ecache volsnap!VspSignalCompletion
Args: 00000000 00000000 00000000 00000000
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
An advice to succeed in Software Technical Support:
They said : The dump came from the wrong site
He’s a page from the end of the dump
I said : The dump came from the right site
Took me just one look
<…>
With a little debugging
You will survive
With a little debugging
You will get by
Do what you want
Go your own way
in Technical Support.
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
This is another tracing example of unified debugging patterns introduced previously.
- Analysis Patterns
- Architectural Patterns
Debug Event Subscription / Notification
- Design Patterns
Shared Debug Event State
- Implementation Patterns
Shared Variable
- Usage Patterns
Saving a memory address obtained at a breakpoint event in a debugger pseudo-register for use at later breakpoint events
Debugging.tv published a case study for tracing window messages in WinDbg. There a pseudo-register is used to save a buffer address before GetMessage call and then to reuse it after the call. Please look at Event State Management slide on Frames episode 0×06 presentation. The full WinDbg log and the recording are available there too.
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
This is a seasonal greetings postcard with Windows 8 bluescreen theme:

- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Based on ideas of Roman Jakobson about “marked” and “unmarked” categories we propose another pattern called Marked Message that groups trace messages based on having some feature or property. For example, marked messages may point to some domain of software activity such related to functional requirements and therefore may help in troubleshooting and debugging. Unmarked messages include all other messages that don’t say anything about such activities (although may include messages pointing to such activities indirectly we unaware of) or messages that say explicitly that no such activity has occurred. We can even borrow a notation of distinctive features from phonology and annotate any trace or log after analysis to compare it with a master trace, for example, compose the following list of software trace distinctive features:
session database queries [+]
session initialization [-]
socket activity [+]
process A launched [+]
process B launched [-]
process A exited [-]
[…]
Here [+] means the activity is present in the trace and [-] means the activity is either undetected or definitely not present. Sometime a non-present activity can be a marked activity corresponding to all inclusive unmarked present activity (see, for example, No Activity pattern).
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
A WinDbg snippet from a multithreaded service:
0:2011> ~2012s
0:2012>
PS. Teaching WinDbg commands on the eve!
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
The beginning of a debugging tale:
He was debugging for 7 years and when he stopped and looked around he saw only 2 people left from the team of 50 strong technical support engineers.
Folktale
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Sometimes we have memory leaks related to the growing number of page tables. One reason for that could be the growing number of zombie processes (noticeable with tens of thousands of them).
1: kd> !process 0 0
[...]
PROCESS fffffa80266bd6f0
SessionId: 0 Cid: 0a6c Peb: 7fffffdc000 ParentCid: 03ac
DirBase: 9d35a000 ObjectTable: fffff8a00170ac80 HandleCount: 152.
Image: svchost.exe
[…]
PROCESS fffffa8027de9b30
SessionId: 0 Cid: 21d0 Peb: 7fffffdf000 ParentCid: 02e0
DirBase: 37881000 ObjectTable: 00000000 HandleCount: 0.
Image: conhost.exe
[…]
PROCESS fffffa8028eb0600
SessionId: 0 Cid: ab88 Peb: 7fffffdf000 ParentCid: 02e0
DirBase: 27a2f000 ObjectTable: 00000000 HandleCount: 0.
Image: conhost.exe
[…]
Even zombies have at least one remaining page (page directory) from the former page tables of their virtual to physical memory mapping (!dd is the same as dd command but for physical memory):
1: kd> !dd 9d35a000
#9d35a000 9dd62867 03c00000 00000000 00000000
#9d35a010 00000000 00000000 00000000 00000000
#9d35a020 00000000 00000000 00000000 00000000
#9d35a030 00000000 00000000 00000000 00000000
#9d35a040 00000000 00000000 00000000 00000000
#9d35a050 00000000 00000000 00000000 00000000
#9d35a060 00000000 00000000 00000000 00000000
#9d35a070 00000000 00000000 9d45e867 49500000
1: kd> !dd 37881000
#37881000 00000000 00000000 00000000 00000000
#37881010 00000000 00000000 00000000 00000000
#37881020 00000000 00000000 00000000 00000000
#37881030 00000000 00000000 00000000 00000000
#37881040 00000000 00000000 00000000 00000000
#37881050 00000000 00000000 00000000 00000000
#37881060 00000000 00000000 00000000 00000000
#37881070 00000000 00000000 00000000 00000000
1: kd> !dd 27a2f000
#27a2f000 00000000 00000000 00000000 00000000
#27a2f010 00000000 00000000 00000000 00000000
#27a2f020 00000000 00000000 00000000 00000000
#27a2f030 00000000 00000000 00000000 00000000
#27a2f040 00000000 00000000 00000000 00000000
#27a2f050 00000000 00000000 00000000 00000000
#27a2f060 00000000 00000000 00000000 00000000
#27a2f070 00000000 00000000 00000000 00000000
We also see that 2 conhost.exe processes have identical physical to virtual mapping because their user space mappings are no longer valid (zeroed) and svchost.exe process has user space mapping (in blue italics):
1: kd> !ptov 27a2f000
Amd64PtoV: pagedir 27a2f000
27a2f000 fffff6fb`7dbed000
71530000 fffff6fb`7dbee000
19d000 fffff6fb`7dbef000
199000 fffff6fb`7dbf0000
b6a04000 fffff6fb`7dbf1000
b1f57000 fffff6fb`7dbf2000
29c4000 fffff6fb`7dbf3000
1c53000 fffff6fb`7dbf5000
[…]
2e4d8000 fffffa80`28f2d000
2c3d7000 fffffa80`28f2e000
30ed6000 fffffa80`28f2f000
2efd5000 fffffa80`28f30000
2ded4000 fffffa80`28f31000
2a5d3000 fffffa80`28f32000
bb400000 fffffa80`29600000 (large page)
bb200000 fffffa80`29800000 (large page)
100000 ffffffff`ffd00000
105000 ffffffff`ffd01000
101000 ffffffff`ffd02000
102000 ffffffff`ffd03000
103000 ffffffff`ffd04000
104000 ffffffff`ffd05000
fec00000 ffffffff`ffd06000
1000 ffffffff`ffd07000
106000 ffffffff`ffd08000
123000 ffffffff`ffd09000
0 ffffffff`ffd0a000
124000 ffffffff`ffd0b000
2000 ffffffff`ffd0c000
e00c7000 ffffffff`ffd0d000
e0080000 ffffffff`ffd0e000
107000 ffffffff`ffd25000
108000 ffffffff`ffd26000
109000 ffffffff`ffd27000
10a000 ffffffff`ffd28000
10b000 ffffffff`ffd29000
10c000 ffffffff`ffd2a000
10d000 ffffffff`ffd2b000
10e000 ffffffff`ffd2c000
10f000 ffffffff`ffd2d000
110000 ffffffff`ffd2e000
111000 ffffffff`ffd2f000
112000 ffffffff`ffd30000
113000 ffffffff`ffd31000
114000 ffffffff`ffd32000
115000 ffffffff`ffd33000
116000 ffffffff`ffd34000
117000 ffffffff`ffd35000
118000 ffffffff`ffd36000
119000 ffffffff`ffd37000
11a000 ffffffff`ffd38000
11b000 ffffffff`ffd39000
11c000 ffffffff`ffd3a000
11d000 ffffffff`ffd3b000
11e000 ffffffff`ffd3c000
11f000 ffffffff`ffd3d000
120000 ffffffff`ffd3e000
121000 ffffffff`ffd3f000
122000 ffffffff`ffd40000
fee00000 ffffffff`fffe0000
1: kd> !ptov 37881000
Amd64PtoV: pagedir 37881000
37881000 fffff6fb`7dbed000
8d482000 fffff6fb`7dbee000
19d000 fffff6fb`7dbef000
199000 fffff6fb`7dbf0000
b6a04000 fffff6fb`7dbf1000
b1f57000 fffff6fb`7dbf2000
29c4000 fffff6fb`7dbf3000
1c53000 fffff6fb`7dbf5000
[…]
2e4d8000 fffffa80`28f2d000
2c3d7000 fffffa80`28f2e000
30ed6000 fffffa80`28f2f000
2efd5000 fffffa80`28f30000
2ded4000 fffffa80`28f31000
2a5d3000 fffffa80`28f32000
bb400000 fffffa80`29600000 (large page)
bb200000 fffffa80`29800000 (large page)
100000 ffffffff`ffd00000
105000 ffffffff`ffd01000
101000 ffffffff`ffd02000
102000 ffffffff`ffd03000
103000 ffffffff`ffd04000
104000 ffffffff`ffd05000
fec00000 ffffffff`ffd06000
1000 ffffffff`ffd07000
106000 ffffffff`ffd08000
123000 ffffffff`ffd09000
0 ffffffff`ffd0a000
124000 ffffffff`ffd0b000
2000 ffffffff`ffd0c000
e00c7000 ffffffff`ffd0d000
e0080000 ffffffff`ffd0e000
107000 ffffffff`ffd25000
108000 ffffffff`ffd26000
109000 ffffffff`ffd27000
10a000 ffffffff`ffd28000
10b000 ffffffff`ffd29000
10c000 ffffffff`ffd2a000
10d000 ffffffff`ffd2b000
10e000 ffffffff`ffd2c000
10f000 ffffffff`ffd2d000
110000 ffffffff`ffd2e000
111000 ffffffff`ffd2f000
112000 ffffffff`ffd30000
113000 ffffffff`ffd31000
114000 ffffffff`ffd32000
115000 ffffffff`ffd33000
116000 ffffffff`ffd34000
117000 ffffffff`ffd35000
118000 ffffffff`ffd36000
119000 ffffffff`ffd37000
11a000 ffffffff`ffd38000
11b000 ffffffff`ffd39000
11c000 ffffffff`ffd3a000
11d000 ffffffff`ffd3b000
11e000 ffffffff`ffd3c000
11f000 ffffffff`ffd3d000
120000 ffffffff`ffd3e000
121000 ffffffff`ffd3f000
122000 ffffffff`ffd40000
fee00000 ffffffff`fffe0000
1: kd> !ptov 9d35a000
Amd64PtoV: pagedir 9d35a000
9e587000 10000
6871e000 20000
af5aa000 30000
af5ab000 31000
afaac000 32000
afbad000 33000
af2f5000 40000
9d66b000 50000
22199000 60000
9d962000 e5000
9d261000 e6000
9dc60000 e7000
9d256000 ea000
9d84f000 eb000
9e4ec000 ec000
9e081000 ed000
9d876000 ee000
9e271000 ef000
b8bfd000 f0000
b8efe000 f1000
b86ff000 f2000
b5302000 f3000
b5202000 f4000
b5502000 f5000
b7f03000 f6000
b8404000 f7000
b8415000 100000
b8b16000 101000
b1b17000 102000
[…]
2cd4000 77512000
5d7000 77515000
5d8000 77516000
4d9000 77517000
b358f000 77590000
aef04000 77591000
68624000 77592000
64b26000 77593000
af4c6000 77595000
b2042000 7efe0000
b2143000 7efe1000
b1a56000 7efe2000
b1a57000 7efe3000
b1b58000 7efe4000
1ba000 7ffe0000
9da69000 bfeb0000
aeeae000 ffea0000
af191000 ffea1000
9d76a000 ffea2000
ae793000 ffea3000
9dc8e000 ffea5000
b7eb7000 ffea6000
9dffc000 ffea7000
[…]
2e4d8000 fffffa80`28f2d000
2c3d7000 fffffa80`28f2e000
30ed6000 fffffa80`28f2f000
2efd5000 fffffa80`28f30000
2ded4000 fffffa80`28f31000
2a5d3000 fffffa80`28f32000
bb400000 fffffa80`29600000 (large page)
bb200000 fffffa80`29800000 (large page)
100000 ffffffff`ffd00000
105000 ffffffff`ffd01000
101000 ffffffff`ffd02000
102000 ffffffff`ffd03000
103000 ffffffff`ffd04000
104000 ffffffff`ffd05000
fec00000 ffffffff`ffd06000
1000 ffffffff`ffd07000
106000 ffffffff`ffd08000
123000 ffffffff`ffd09000
0 ffffffff`ffd0a000
124000 ffffffff`ffd0b000
2000 ffffffff`ffd0c000
e00c7000 ffffffff`ffd0d000
e0080000 ffffffff`ffd0e000
107000 ffffffff`ffd25000
108000 ffffffff`ffd26000
109000 ffffffff`ffd27000
10a000 ffffffff`ffd28000
10b000 ffffffff`ffd29000
10c000 ffffffff`ffd2a000
10d000 ffffffff`ffd2b000
10e000 ffffffff`ffd2c000
10f000 ffffffff`ffd2d000
110000 ffffffff`ffd2e000
111000 ffffffff`ffd2f000
112000 ffffffff`ffd30000
113000 ffffffff`ffd31000
114000 ffffffff`ffd32000
115000 ffffffff`ffd33000
116000 ffffffff`ffd34000
117000 ffffffff`ffd35000
118000 ffffffff`ffd36000
119000 ffffffff`ffd37000
11a000 ffffffff`ffd38000
11b000 ffffffff`ffd39000
11c000 ffffffff`ffd3a000
11d000 ffffffff`ffd3b000
11e000 ffffffff`ffd3c000
11f000 ffffffff`ffd3d000
120000 ffffffff`ffd3e000
121000 ffffffff`ffd3f000
122000 ffffffff`ffd40000
fee00000 ffffffff`fffe0000
In order to check user space virtual addresses we have to switch to the corresponding process context:
1: kd> !pte fffffa80`28f2d000
VA fffffa8028f2d000
PXE at FFFFF6FB7DBEDFA8 PPE at FFFFF6FB7DBF5000 PDE at FFFFF6FB7EA00A38 PTE at FFFFF6FD40147968
contains 0000000001C53863 contains 0000000001C54863 contains 0000000049320863 contains 000000002E4D8963
pfn 1c53 —DA–KWEV pfn 1c54 —DA–KWEV pfn 49320 —DA–KWEV pfn 2e4d8 -G-DA–KWEV
1: kd> .process /r /p fffffa80266bd6f0
Implicit process is now fffffa80`266bd6f0
Loading User Symbols
1: kd> !pte 10000
VA 0000000000010000
PXE at FFFFF6FB7DBED000 PPE at FFFFF6FB7DA00000 PDE at FFFFF6FB40000000 PTE at FFFFF68000000080
contains 03C000009DD62867 contains 031000009D865867 contains 7C2000009DD66867 contains 9CB000009E587867
pfn 9dd62 —DA–UWEV pfn 9d865 —DA–UWEV pfn 9dd66 —DA–UWEV pfn 9e587 —DA–UW-V
This pattern came to our attention after several customers complained about the growing number of memory allocated for page tables which exceeded a gigabyte after several days.
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -
Sometimes debugging information is absent from module info in memory dumps and a debugger can’t recognize and automatically load symbol files. For example, we see this stack trace without loaded component symbols:
THREAD 8a17c6d8 Cid 02ec.02f0 Teb: 7ffdf000 Win32Thread: e17b4420 WAIT: (UserRequest) UserMode Non-Alertable
89873d00 SynchronizationEvent
IRP List:
89d9fd20: (0006,0094) Flags: 00000800 Mdl: 00000000
Not impersonating
DeviceMap e10086c8
Owning Process 0 Image: <Unknown>
Attached Process 8a17cda0 Image: ApplicationA.exe
Wait Start TickCount 8164394 Ticks: 2884 (0:00:00:45.062)
Context Switch Count 1769160 LargeStack
UserTime 00:00:55.250
KernelTime 00:01:56.109
Start Address 0×0103e5e1
Stack Init ba390000 Current ba38fca0 Base ba390000 Limit ba38b000 Call 0
Priority 15 BasePriority 15 PriorityDecrement 0 DecrementCount 0
*** ERROR: Module load completed but symbols could not be loaded for ModuleA.dll
ChildEBP RetAddr
ba38fcb8 80503836 nt!KiSwapContext+0×2f
ba38fcc4 804fb068 nt!KiSwapThread+0×8a
ba38fcec 805c0750 nt!KeWaitForSingleObject+0×1c2
ba38fd50 8054161c nt!NtWaitForSingleObject+0×9a
ba38fd50 7c90e4f4 nt!KiFastCallEntry+0xfc (TrapFrame @ ba38fd64)
0006f648 7c90df3c ntdll!KiFastSystemCallRet
0006f64c 7c91b22b ntdll!NtWaitForSingleObject+0xc
0006f6d4 7c901046 ntdll!RtlpWaitForCriticalSection+0×132
0006f6dc 01373df7 ntdll!RtlEnterCriticalSection+0×46
WARNING: Stack unwind information not available. Following frames may be wrong.
0006f7a4 0132b785 ModuleA+0×53df7
0006f7cc 0132c728 ModuleA+0xb785
0006f7e4 01346426 ModuleA+0xc728
0006f848 7e418734 ModuleA+0×26426
0006f874 7e418816 USER32!InternalCallWinProc+0×28
0006f8dc 7e4189cd USER32!UserCallWinProcCheckWow+0×150
0006f93c 7e418a10 USER32!DispatchMessageWorker+0×306
0006f94c 0084367e USER32!DispatchMessageW+0xf
0: kd> .process /r /p 8a17cda0
Implicit process is now 8a17cda0
Loading User Symbols
0: kd> lmv m ModuleA
start end module name
01320000 013bb000 ModuleA (deferred)
Image path: C:\Program Files\VendorA\ModuleA.dll
Image name: ModuleA.dll
Timestamp: Thu Aug 11 21:42:08 2011 (4E4484F0)
CheckSum: 000A9C8B
ImageSize: 0009B000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
0: kd> !lmi ModuleA
Loaded Module Info: [ModuleA]
Module: ModuleA
Base Address: 01320000
Image Name: ModuleA.dll
Machine Type: 332 (I386)
Time Stamp: 4e4484f0 Thu Aug 11 21:42:08 2011
Size: 9b000
CheckSum: a9c8b
Characteristics: 2102
Debug Data Dirs: Type Size VA Pointer
CODEVIEW 5e, 830a0, 830a0 [Debug data not mapped] - can’t validate symbols, if present.
Symbol Type: DEFERRED - No error - symbol load deferred
Load Report: no symbols loaded
However, in a stack trace collection (!process 0 ff WinDbg command) we find another stack trace from a different process but with loaded symbol files for ModuleA:
THREAD 89703020 Cid 1068.1430 Teb: 7ffdf000 Win32Thread: e34d43a8 WAIT: (UserRequest) UserMode Non-Alertable
89a3ac58 NotificationEvent
89703110 NotificationTimer
IRP List:
899ab488: (0006,0094) Flags: 00000900 Mdl: 00000000
Not impersonating
DeviceMap e10086c8
Owning Process 0 Image: <Unknown>
Attached Process 89825020 Image: ApplicationB.exe
Wait Start TickCount 8164457 Ticks: 2821 (0:00:00:44.078)
Context Switch Count 552 LargeStack
UserTime 00:00:00.296
KernelTime 00:00:00.890
Start Address 0×0103e5e1
Stack Init b8796000 Current b8795ca0 Base b8796000 Limit b8791000 Call 0
Priority 15 BasePriority 15 PriorityDecrement 0 DecrementCount 0
ChildEBP RetAddr
b8795cb8 80503836 nt!KiSwapContext+0×2f
b8795cc4 804fb068 nt!KiSwapThread+0×8a
b8795cec 805c0750 nt!KeWaitForSingleObject+0×1c2
b8795d50 8054161c nt!NtWaitForSingleObject+0×9a
b8795d50 7c90e4f4 nt!KiFastCallEntry+0xfc (TrapFrame @ b8795d64)
0006fa1c 7c90df3c ntdll!KiFastSystemCallRet
0006fa20 7c8025db ntdll!NtWaitForSingleObject+0xc
0006fa84 010ae96a kernel32!WaitForSingleObjectEx+0xa8
0006fafc 010aeaaf ModuleA!Wait+0xaa
0006fb38 010b84ce ModuleA!Read+0×6f
[…]
0: kd> !lmi ModuleA
Loaded Module Info: [ModuleA]
Module: ModuleA
Base Address: 01090000
Image Name: ModuleA.dll
Machine Type: 332 (I386)
Time Stamp: 4e4484f0 Thu Aug 11 21:42:08 2011
Size: 9b000
CheckSum: a9c8b
Characteristics: 2102
Debug Data Dirs: Type Size VA Pointer
CODEVIEW 5e, 830a0, 830a0 RSDS - GUID: {C14E734A-367F-4DD0-974D-FA47C1194F28}
Age: 1, Pdb: Y:\src\…\ModuleA.pdb
Symbol Type: DEFERRED - No error - symbol load deferred
Load Report: no symbols loaded
0: kd> lmv m ModuleA
start end module name
01090000 0112b000 ModuleA (deferred)
Image path: C:\Program Files\VendorA\ModuleA.dll
Image name: ModuleA.dll
Timestamp: Thu Aug 11 21:42:08 2011 (4E4484F0)
CheckSum: 000A9C8B
ImageSize: 0009B000
File version: 1.3.0.0
Product version: 1.3.0.0
File flags: 8 (Mask 3F) Private
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: VendorA
ProductName: VendorA
InternalName: ModuleA.dll
OriginalFilename: ModuleA.dll
ProductVersion: 1.3
FileVersion: 1.3.0.0
FileDescription: ModuleA GUI
LegalCopyright: Copyright VendorA
So we switch to that thread (with the new process context) to get the needed symbol path:
0: kd> .thread /r /p 89703020
Implicit thread is now 89703020
Implicit process is now 89825020
Loading User Symbols
0: kd> kL
*** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr
b8795cb8 80503836 nt!KiSwapContext+0x2f
b8795cc4 804fb068 nt!KiSwapThread+0x8a
b8795cec 805c0750 nt!KeWaitForSingleObject+0x1c2
b8795d50 8054161c nt!NtWaitForSingleObject+0x9a
b8795d50 7c90e4f4 nt!KiFastCallEntry+0xfc
0006fa1c 7c90df3c ntdll!KiFastSystemCallRet
0006fa20 7c8025db ntdll!NtWaitForSingleObject+0xc
0006fa84 010ae96a kernel32!WaitForSingleObjectEx+0xa8
0006fafc 010aeaaf ModuleA!Wait+0xaa
0006fb38 010b84ce ModuleA!Read+0×6f
[…]
0: kd> lmv m ModuleA
start end module name
01090000 0112b000 ModuleA (private pdb symbols) c:\sym\ModuleA.pdb\C14E734A367F4DD0974DFA47C1194F281\ModuleA.pdb
Loaded symbol image file: ModuleA.dll
[…]
Now we switch back to our problem stack trace and set the found symbol path explicitly:
0: kd> .thread /r /p 8a17c6d8
Implicit thread is now 8a17c6d8
Implicit process is now 8a17cda0
Loading User Symbols
0: kd> kL
*** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr
ba38fcb8 80503836 nt!KiSwapContext+0x2f
ba38fcc4 804fb068 nt!KiSwapThread+0x8a
ba38fcec 805c0750 nt!KeWaitForSingleObject+0x1c2
ba38fd50 8054161c nt!NtWaitForSingleObject+0x9a
ba38fd50 7c90e4f4 nt!KiFastCallEntry+0xfc
0006f648 7c90df3c ntdll!KiFastSystemCallRet
0006f64c 7c91b22b ntdll!NtWaitForSingleObject+0xc
0006f6d4 7c901046 ntdll!RtlpWaitForCriticalSection+0x132
*** ERROR: Module load completed but symbols could not be loaded for ModuleA.dll
0006f6dc 01373df7 ntdll!RtlEnterCriticalSection+0x46
WARNING: Stack unwind information not available. Following frames may be wrong.
0006f7a4 0132b785 ModuleA+0×53df7
0006f7cc 0132c728 ModuleA+0xb785
0006f7e4 01346426 ModuleA+0xc728
0006f848 7e418734 ModuleA+0×26426
0006f874 7e418816 USER32!InternalCallWinProc+0×28
0006f8dc 7e4189cd USER32!UserCallWinProcCheckWow+0×150
0006f93c 7e418a10 USER32!DispatchMessageWorker+0×306
0006f94c 0084367e USER32!DispatchMessageW+0xf
[…]
0: kd> .sympath+ c:\sym\ModuleA.pdb\C14E734A367F4DD0974DFA47C1194F281
Symbol search path is: SRV*c:\mss*http://msdl.microsoft.com/download/symbols; c:\sym\ModuleA.pdb\C14E734A367F4DD0974DFA47C1194F281
[…]
0: kd> .reload
Loading Kernel Symbols
Loading User Symbols
Loading unloaded module list
0: kd> kL
*** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr
ba38fcb8 80503836 nt!KiSwapContext+0x2f
ba38fcc4 804fb068 nt!KiSwapThread+0x8a
ba38fcec 805c0750 nt!KeWaitForSingleObject+0x1c2
ba38fd50 8054161c nt!NtWaitForSingleObject+0x9a
ba38fd50 7c90e4f4 nt!KiFastCallEntry+0xfc
0006f648 7c90df3c ntdll!KiFastSystemCallRet
0006f64c 7c91b22b ntdll!NtWaitForSingleObject+0xc
0006f6d4 7c901046 ntdll!RtlpWaitForCriticalSection+0x132
0006f6dc 01373df7 ntdll!RtlEnterCriticalSection+0x46
0006f6e4 0132b22e ModuleA!CSLock+0×7
0006f7a4 0132b785 ModuleA!SignalEvent+0×5e
[…]
0006f848 7e418734 ModuleA!WindowProc+0×136
0006f874 7e418816 USER32!InternalCallWinProc+0×28
0006f8dc 7e4189cd USER32!UserCallWinProcCheckWow+0×150
0006f93c 7e418a10 USER32!DispatchMessageWorker+0×306
0006f94c 0084367e USER32!DispatchMessageW+0xf
[…]
- Dmitry Vostokov @ DumpAnalysis.org + TraceAnalysis.org -