﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-随风-随笔分类-Windbg</title><link>http://www.cppblog.com/Alexxu/category/10098.html</link><description>游戏理想
Time is life</description><language>zh-cn</language><lastBuildDate>Thu, 21 Jan 2010 14:21:24 GMT</lastBuildDate><pubDate>Thu, 21 Jan 2010 14:21:24 GMT</pubDate><ttl>60</ttl><item><title>FS寄存器到_TEB线程环境块</title><link>http://www.cppblog.com/Alexxu/archive/2010/01/20/106066.html</link><dc:creator>Only Soft</dc:creator><author>Only Soft</author><pubDate>Wed, 20 Jan 2010 07:10:00 GMT</pubDate><guid>http://www.cppblog.com/Alexxu/archive/2010/01/20/106066.html</guid><wfw:comment>http://www.cppblog.com/Alexxu/comments/106066.html</wfw:comment><comments>http://www.cppblog.com/Alexxu/archive/2010/01/20/106066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Alexxu/comments/commentRss/106066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Alexxu/services/trackbacks/106066.html</trackback:ping><description><![CDATA[从FS寄存器获取当前线程ID<br>int GetThreadId()<br>{<br>&nbsp;int ithread = 0;<br>&nbsp;_asm{<br>&nbsp;&nbsp;&nbsp; xor esi , esi<br>&nbsp;&nbsp;&nbsp; mov eax, fs:[esi+18h]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov ecx, [eax+ 20h] <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov eax, [eax+ 24h]<br>&nbsp;&nbsp;&nbsp; mov dword ptr[ithread], eax<br>&nbsp;}<br>&nbsp;return ithread;<br>}<br>从FS寄存器获取当前进程ID<br>int GetProcessId()<br>{<br>&nbsp;int iProcess = 0;<br>&nbsp;_asm{<br>&nbsp;&nbsp;&nbsp; xor esi , esi<br>&nbsp;&nbsp;&nbsp; mov eax, fs:[esi+18h]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov ecx, [eax+ 20h] <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov eax, [eax+ 24h]<br>&nbsp;&nbsp;&nbsp; mov dword ptr[iProcess ],&nbsp;ecx<br>&nbsp;}<br>&nbsp;return iProcess ;<br>}<br><br>原理：<br>1.fs:18h 地址指向线程环境块_TEB<br>打开windbg可以证明：<br>0:028&gt; dd fs:18h L1<br>0053:00000018&nbsp; <span style="COLOR: red">7eeb8000</span><br>0:028&gt; !teb<br>TEB at <span style="COLOR: red">7eeb8000</span><br>&nbsp;&nbsp;&nbsp; ExceptionList:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1f8ff15c<br>&nbsp;&nbsp;&nbsp; StackBase:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1f900000<br>&nbsp;&nbsp;&nbsp; StackLimit:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1f8fc000<br>&nbsp;&nbsp;&nbsp; SubSystemTib:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000000<br>&nbsp;&nbsp;&nbsp; FiberData:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00001e00<br>&nbsp;&nbsp;&nbsp; ArbitraryUserPointer: 00000000<br>&nbsp;&nbsp;&nbsp; Self:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7eeb8000<br>&nbsp;&nbsp;&nbsp; EnvironmentPointer:&nbsp;&nbsp; 00000000<br>&nbsp;&nbsp;&nbsp; ClientId:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00001a30 . 00001408<br>&nbsp;&nbsp;&nbsp; RpcHandle:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00000000<br>&nbsp;&nbsp;&nbsp; Tls Storage:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 133d2718<br>&nbsp;&nbsp;&nbsp; PEB Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7efde000<br>&nbsp;&nbsp;&nbsp; LastErrorValue:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>&nbsp;&nbsp;&nbsp; LastStatusValue:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c0000302<br>&nbsp;&nbsp;&nbsp; Count Owned Locks:&nbsp;&nbsp;&nbsp; 0<br>&nbsp;&nbsp;&nbsp; HardErrorMode:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br><br>2. 在_TEB中找到线程ID和进程ID<br>0:028&gt; dt ntdll!_TEB<br>&nbsp;&nbsp; +0x000 NtTib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : _NT_TIB<br>&nbsp;&nbsp; +0x01c EnvironmentPointer : Ptr32 Void<br>&nbsp;&nbsp; +0x020 ClientId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : _CLIENT_ID<br><br>0:028&gt; dt ntdll!_CLIENT_ID<br>&nbsp;&nbsp; +0x000 UniqueProcess&nbsp;&nbsp;&nbsp; : Ptr32 Void&nbsp;&nbsp;&gt;进程ID<br>&nbsp;&nbsp; +0x004 UniqueThread&nbsp;&nbsp;&nbsp;&nbsp; : Ptr32 Void&nbsp; &gt;线程ID<br><br>当然从TEB又可以找到_PEB的地址，从_PEB里面可以获取到更多的信息。暂且搁笔~~
<img src ="http://www.cppblog.com/Alexxu/aggbug/106066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Alexxu/" target="_blank">Only Soft</a> 2010-01-20 15:10 <a href="http://www.cppblog.com/Alexxu/archive/2010/01/20/106066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>驱动中关于内存分配</title><link>http://www.cppblog.com/Alexxu/archive/2009/11/15/101030.html</link><dc:creator>Only Soft</dc:creator><author>Only Soft</author><pubDate>Sun, 15 Nov 2009 15:57:00 GMT</pubDate><guid>http://www.cppblog.com/Alexxu/archive/2009/11/15/101030.html</guid><wfw:comment>http://www.cppblog.com/Alexxu/comments/101030.html</wfw:comment><comments>http://www.cppblog.com/Alexxu/archive/2009/11/15/101030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Alexxu/comments/commentRss/101030.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Alexxu/services/trackbacks/101030.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在驱动中分配内存，通常你的驱动会向NT VMM请求内存，这是你必须决定你的内存是可分页的或者非可分页的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分配原则：尽量使用可分页内存，但是必须注意高等级IRQL执行不允许page fault。所以不允许采用可分页内存。可以使用PAGED_CODE();宏来检查。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非分页内存在系统中是一个有限的资源，取决于操作系统和物理内存大小. (NT VMM使用一个私有算法来计算非分页大小，这个算法使用物理内存总是作为计算因子来计算。)<br>&nbsp;&nbsp;&nbsp;&nbsp; NT提供如下例程来分配内存：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExAllocatePool();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExAllocatePoolWithQuota();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExAllocatePoolWithTag();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExAllocatePoolWithQuotaTag<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用以上例程分配内存是必须制定内存的类型：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NonPagedPool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PagedPool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NonPagedPoolMustSuccessed.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......................<br><br>&nbsp;&nbsp;&nbsp; 关于非分页内存碎片问题：<br>&nbsp;&nbsp;&nbsp;&nbsp; 本来初始化的时候地址都是相邻的非分页池会变成碎片。而且VMM在托大的时候也不保证地址相邻。<br>&nbsp;&nbsp;&nbsp; 如果请求的分配或者释放小块内存（小于一个PAGE_SIZE）,可能导致物理内存碎片化。这回给系统带来各种各样的问题，包括降低系统性能和分配内存失败的情况。<br>&nbsp;&nbsp;&nbsp; 解决办法使用旁视列表，旁视列表是一个NT4.0开始提供的一个内存分配方式；具体请参考WDK docment.<br>&nbsp;&nbsp;&nbsp;&nbsp; 顺便提一下内核栈：<br>&nbsp;&nbsp;&nbsp;&nbsp; 每个在NT平台的线程有一个用户栈在用户模式执行的时候使用，一个内核栈在内核模式执行的时候使用。当线程请求系统服务而切换到内核模式的时候，陷阱机制会切换栈。用分配和线程的内核空间栈来覆盖用户空间栈。<br>在NT3.51之前，内核栈限制在两页的内存中。NT4.0开始增加到12KB.必须要谨慎的在栈上使用变量以节省占空间，防止超过限制而是系统停止。<br><br>
<img src ="http://www.cppblog.com/Alexxu/aggbug/101030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Alexxu/" target="_blank">Only Soft</a> 2009-11-15 23:57 <a href="http://www.cppblog.com/Alexxu/archive/2009/11/15/101030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windbg基础篇--window API</title><link>http://www.cppblog.com/Alexxu/archive/2009/08/24/94232.html</link><dc:creator>Only Soft</dc:creator><author>Only Soft</author><pubDate>Mon, 24 Aug 2009 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/Alexxu/archive/2009/08/24/94232.html</guid><wfw:comment>http://www.cppblog.com/Alexxu/comments/94232.html</wfw:comment><comments>http://www.cppblog.com/Alexxu/archive/2009/08/24/94232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Alexxu/comments/commentRss/94232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Alexxu/services/trackbacks/94232.html</trackback:ping><description><![CDATA[User32.dll,kernel32.dll,shell32.dll,gdi32.dll,rpcrt4.dll,comctl32.dll,advapi32.dll,version.dll等dll代表了Win32 API的基本提供者；<br>Win32 API中的所有调用最终都转向了ntdll.dll，再由它转发至ntoskrnl.exe。ntdll.dll是本机 API用户模式的终端。真正的接口在ntoskrnl.exe里完成。事实上，内核模式的驱动大部分时间调用这个模块，如果它们请求系统服务。Ntdll.dll的主要作用就是让内核函数的特定子集可以被用户模式下运行的程序调用。Ntdll.dll通过软件中断int 2Eh进入ntoskrnl.exe，就是通过中断门切换CPU特权级。<br>Ntdll.dll 上面的相关API函数原型和参数都没有文档化(Undocumented ):&nbsp; <a href="http://undocumented.ntinternals.net/">http://undocumented.ntinternals.net/</a>&nbsp;这里提供了Ntdll.dll部分未公开函数的原型.<br><br>理解window API及函数原型对我们的调试将是非常重要的: 因为你时常需要去察看一些函数的参数,或者根据参数找到某些输入指针.<br><br>例如:<br>&nbsp; 17&nbsp; Id: a84.cc4 Suspend: 1 Teb: 7ff3a000 Unfrozen<br>ChildEBP RetAddr&nbsp; Args to Child&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>187ffdb8 77845e6c 7782fc72 00001938 00000000 ntdll!KiFastSystemCallRet<br>187ffdbc 7782fc72 00001938 00000000 00000000 ntdll!NtWaitForSingleObject+0xc<br>187ffe20 7782fb56 00000000 00000000 00000000 ntdll!RtlpWaitOnCriticalSection+0x13e<br>187ffe48 01b05d13 0x77c8ba60&nbsp;81fa55ed 028766c8 ntdll!RtlEnterCriticalSection+0x150<br><br>从堆栈可以看出线程17 正在进入某一个临界区.&nbsp; 0x77c8ba60 就是传入的临界值 参数.<br><br>17&gt; !cs 0x77c8ba60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; !cs 是用来查看临界区信息的命令<br>DebugInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x77fbde20<br>Critical&nbsp;section&nbsp;&nbsp;&nbsp;=&nbsp;0x77c8ba60&nbsp;(GDI32!semColorSpaceCache+0x0)<br>LOCKED<br>LockCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0<br>OwningThread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00000dd8<br>RecursionCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x1<br>LockSemaphore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x0<br>SpinCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x00000000<br><br>可以看到 LOCKED 代表临界区是锁定状态. 即被占用.<br>OwningThread&nbsp;&nbsp;&nbsp;即是占用线程.<br><br>临界区信息结构定义在ntdll, 可以使用如下指令进行察看.<br>&gt; dt&nbsp; ntdll!_RTL_CRITICAL_SECTION<br>&nbsp;&nbsp; +0x000 DebugInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Ptr32 _RTL_CRITICAL_SECTION_DEBUG<br>&nbsp;&nbsp; +0x004 LockCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Int4B<br>&nbsp;&nbsp; +0x008 RecursionCount&nbsp;&nbsp; : Int4B<br>&nbsp;&nbsp; +0x00c OwningThread&nbsp;&nbsp;&nbsp;&nbsp; : Ptr32 Void<br>&nbsp;&nbsp; +0x010 LockSemaphore&nbsp;&nbsp;&nbsp; : Ptr32 Void<br>&nbsp;&nbsp; +0x014 SpinCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : Uint4B<br><br>察看某个动态库函数表的指令:<br>x ntdll!*<br>x kernal!*<br><br>察看结构体定义:<br>dt ntdll!*<br><br>任何动态库包括window 32的用户态dll 和用户自定义动态库都是生长在进程内存空间上的.<br>DLL 没有自己的"私有"地址空间. 它们总是被影射到应用程序的虚拟地址空间,在需要时才会被读取到物理内存中. <br>在本系列的其它章节我会谈到虚拟地址空间的内容.<br><br>通过指令可以看到ntdll 被映射到77800000 ~ 7793c000的内存空间中.<br>&gt; x *!<br>77800000 7793c000&nbsp;&nbsp; ntdll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (pdb symbols)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c:\mylocalsymbols\ntdll.pdb\F0164DA71FAF4765B8F3DB4F2D7650EA2\ntdll.pdb<br><br>当你的代码(线程)栈中出现地址范围在 77800000 ~7793c000&nbsp;之间的函数调用都表示在call NTDLL.dll<br>比如:<br>&nbsp;&nbsp; 7&nbsp; Id: a84.c34 Suspend: 1 Teb: 7ff3f000 Unfrozen<br>ChildEBP RetAddr&nbsp; Args to Child&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>089bfe8c 77845e6c 75a0179c 00000d98 00000000 ntdll!KiFastSystemCallRet<br>089bfe90 75a0179c 00000d98 00000000 00000000 ntdll!NtWaitForSingleObject+0xc<br>089bfefc 75c9f003 00000d98 ffffffff 00000000 KERNELBASE!WaitForSingleObjectEx+0x98<br>089bff14 75c9efb2 00000d98 ffffffff 00000000 kernel32!WaitForSingleObjectExImplementation+0x75<br>089bff28 69434fea 00000d98 ffffffff 0780c178 kernel32!WaitForSingleObject+0x12<br>WARNING: Stack unwind information not available. Following frames may be wrong.<br>此线程中WARNING: Stack unwind information not available. Following frames may be wrong.表示windbg无法翻译或者找到对应symbols来显示code stack. 这种错误往往是保存dump file时出现的某种异常信息.window也没有给出合理的解释.<br>以下是MSDN的原话:<br><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: +mn-ea; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">In some cases, the stack trace function will fail in the debugger. This can be caused by a call to an invalid address that caused the debugger to lose the location of the return address; or you may have come across a stack pointer for which you cannot directly get a stack trace; or there could be some other debugger problem. In any case, being able to manually walk a stack is often valuable.<br></span><br>这时候你需要手动的进行恢复栈调用. 如果你了解每个动态库的映射地址你就很容易进行分析了.<br><br>察看动态库中每个函数映射的地址可以采用如下指令 :<br>x ntdll!<br><br><br>手动恢复栈的大致原理如下:<br>1. 列出线程环境信息<br>&nbsp;<span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">0:000&gt; !</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">teb</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"> </span>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">TEB at 7fffe000</span></p>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">ExceptionList</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>0012ff88</span></p>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">StackBase</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>00130000</span></p>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">StackLimit</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">:<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>00126000</span></p>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&#8230;&#8230;&#8230;.<br></span></p>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">2. 打开整个线程栈.<br>0:000&gt; </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">dds</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"> 00126000 00130000</span></p>
<p style="MARGIN-TOP: 8pt; MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.21in; VERTICAL-ALIGN: baseline; DIRECTION: ltr; TEXT-INDENT: -0.21in; LINE-HEIGHT: 18pt; unicode-bidi: embed; TEXT-ALIGN: left; language: en-US; mso-line-height-rule: exactly"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: zh-CN">3. 察看内存中所有可能是函数返回值</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">.<span style="mso-spacerun: yes">&nbsp;&nbsp;<br></span>&gt;</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US">ln</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: en-US"></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-bidi-font-family: +mn-cs; mso-color-index: 1; mso-font-kerning: 12.0pt; language: zh-CN">&nbsp;address</span><br><br><br><br></p>
<img src ="http://www.cppblog.com/Alexxu/aggbug/94232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Alexxu/" target="_blank">Only Soft</a> 2009-08-24 11:20 <a href="http://www.cppblog.com/Alexxu/archive/2009/08/24/94232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windbg基础篇--异常上下文</title><link>http://www.cppblog.com/Alexxu/archive/2009/08/22/94085.html</link><dc:creator>Only Soft</dc:creator><author>Only Soft</author><pubDate>Sat, 22 Aug 2009 05:47:00 GMT</pubDate><guid>http://www.cppblog.com/Alexxu/archive/2009/08/22/94085.html</guid><wfw:comment>http://www.cppblog.com/Alexxu/comments/94085.html</wfw:comment><comments>http://www.cppblog.com/Alexxu/archive/2009/08/22/94085.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Alexxu/comments/commentRss/94085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Alexxu/services/trackbacks/94085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本人进2年来主要在做windbg调试相关的工作, 有一些心得和体会. 我会逐片写在我blog中,希望对大家有用.&nbsp; windbg调试最重要的是要对系统的方方面面有比较深入的了解. 只有了解了系统工作原理才能够顺藤摸瓜.&nbsp; 一步步展开线索.&nbsp;&nbsp; windbg基础篇...&nbsp;&nbsp;<a href='http://www.cppblog.com/Alexxu/archive/2009/08/22/94085.html'>阅读全文</a><img src ="http://www.cppblog.com/Alexxu/aggbug/94085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Alexxu/" target="_blank">Only Soft</a> 2009-08-22 13:47 <a href="http://www.cppblog.com/Alexxu/archive/2009/08/22/94085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>