123456

 
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 39 下一页

2012年5月16日

Windbg命令学习9,经典死锁(!cs和~~[TID])

摘要: 先上个代码,自己随手写的:#include CRITICAL_SECTION cs1;CRITICAL_SECTION cs2;DWORD __stdcall thread1(LPVOID lp){ EnterCriticalSection(&cs1); Sleep(10); EnterCriticalSection(&cs2); return 0;}DWORD __stdcall thread2(LPVOID lp){ EnterCriticalSection(&cs2); Sleep(10); EnterCriticalSection(&cs1); retu 阅读全文

posted @ 2012-05-16 13:15 hgy413 阅读(945) 评论(0) 推荐(0) 编辑

2012年5月15日

Windbg命令学习8(.frame和dt)

摘要: 这里使用一个debug程序:1.frame.frame命令指定使用哪个局部上下文(作用域)来解析局部变量,或者显示当前的局部上下文帧序号(frame number)是堆栈帧在堆栈回溯中的位置。可以使用k (Display Stack Backtrace)命令或者Calls 窗口查看堆栈回溯。第一行 (当前帧) 的帧序号是0。后面的行分别是1、2、3等等。0:000> kn # ChildEBP RetAddr 00 0012f78c 7c92daea ntdll!KiFastSystemCallRet01 0012f790 7c932298 ntdll!ZwRequestWaitRepl 阅读全文

posted @ 2012-05-15 14:27 hgy413 阅读(1185) 评论(0) 推荐(0) 编辑

2012年5月14日

Windbg命令学习7(d*s和~s (n m ~f ~u))

摘要: 以下默认windbg加载calc程序1.d*sdds、dps和dqs命令显示给定范围内存的内容,它们是把内存区域转储出来,并把内存中每个元素都视为一个符号对其进行解析,dds是四字节视为一个符号,dqs是每8字节视为一个符号,dps是根据当前处理器架构来选择最合适的长度比如要看看当前stack 中保存了哪些函数地址,就可以检查ebp 指向的内存0:000> dds ebp0007fdfc 0007ff1c0007fe00 010021b0 calc!WinMain+0x25f0007fe04 0007fee80007fe08 000000000007fe0c 000000000007.. 阅读全文

posted @ 2012-05-14 17:33 hgy413 阅读(436) 评论(0) 推荐(0) 编辑

Windbg命令学习6(k和x)

摘要: 1.kk*命令显示给定线程的调用堆栈,以及其他相关信息~0 k表示打印0号线程的调用堆栈,直接用k表示打印当前线程的调用堆栈0:002> ~0kChildEBP RetAddr 0007fddc 77d191be ntdll!KiFastSystemCallRet0007fdfc 010021b0 USER32!NtUserGetMessage+0xc0007ff1c 010125e9 calc!WinMain+0x25f0007ffc0 7c817077 calc!WinMainCRTStartup+0x1740007fff0 00000000 kernel32!BaseProcess 阅读全文

posted @ 2012-05-14 16:15 hgy413 阅读(350) 评论(0) 推荐(0) 编辑

Windbg命令学习6(!runaway和~)

摘要: 1.!runaway!runaway命令显示每个线程消费的时间Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1Bit 1 (0x2) 显示每个线程消耗的内核时间(kernel time)。 Bit 2 (0x4) 显示每个线程从创建开始经历了多少时间。 就是三者的组合:1 2 3 4 5 6 70:002> !runaway User Mode Time Thread Time 0:890 0 days 0:00:00.031 2:a00 0 days 0:00:00.000 1:117... 阅读全文

posted @ 2012-05-14 13:44 hgy413 阅读(257) 评论(0) 推荐(0) 编辑

Windbg命令学习5(!address和s和!vadump)

摘要: 以下例子仍以加载calc为基础学习1!address!address 扩展显示目标进程或目标机使用的内存信息。这个学习起来比较简单:我们直接使用!address -?就可以找到它的使用说明:给个例子:0:001> !address -?!address - prints information on the entire address space!address -? - prints this help!address - prints available information about the region ... 阅读全文

posted @ 2012-05-14 11:13 hgy413 阅读(916) 评论(0) 推荐(0) 编辑

2012年5月13日

Windbg命令学习4(d和e)

摘要: 以下所有例子都以CALC程序为示例----hgy413 notes.1 dd*命令显示给定范围内存的内容。d, da, db, dc, dd, dD, df, dp, dq, du, dw, dW, dyb, dyd (Display Memory)如果省略掉Range ,命令将会从上一条内存查看命令结束的位置开始。这使得可以连续的进行内存查看。d这种显示的格式和最近一次d*命令的格式相同。如果之前没有使用过d*命令,d 和db 的效果相同。注意d重复前一个以d开头的命令。包括dda、ddp、ddu、dpa、dpp、dpu、dqa、dqp、dqu、dds、dps、dqs、ds、dS、dg、dl 阅读全文

posted @ 2012-05-13 17:33 hgy413 阅读(569) 评论(0) 推荐(1) 编辑

Windbg命令学习3(lmf和r)

摘要: 以下的所有示例都是加载calc程序1 lmflmf可以列出当前进程中加载的所有DLL文件和对应的路径给个例子:0:001> lmfstart end module name01000000 0101f000 calc C:\WINDOWS\system32\calc.exe10000000 100b0000 safemon C:\Program Files\360\360Safe\safemon\safemon.dll58fb0000 5917a000 AcGenral C:\WINDOWS\AppPatch\AcGenral.DLL5adc0000 ... 阅读全文

posted @ 2012-05-13 16:35 hgy413 阅读(635) 评论(0) 推荐(0) 编辑

线程(进程)上下文

摘要: 字号:大中 小 让我们来看看CreateThread都干了些什么。 上图显示了系统在创建线程和对线程进行初始化时必须做些什么工作。调用CreateThread可使系统创建一个线程内核对象。该对象的初始使用计数是2(在线程停止运行和从CreateThread返回的句柄关闭之前,线程内核对象不会被撤消)。线程的内核对象的其他属性也被初始化,暂停计数被设置为1,退出代码始终为STILL_ACTIVE(0 x 1 0 3),该对象设置为未通知状态。 一旦内核对象创建完成,系统就分配用于线程的堆栈的内存。该内存是从进程的地址空间分配而来的,因为线程并不拥有它自己的地址空间。然后系统将两个值写入新线程的堆 阅读全文

posted @ 2012-05-13 15:58 hgy413 阅读(294) 评论(0) 推荐(0) 编辑

2012年5月12日

Windbg命令学习2(!sym和.reload)

摘要: 以下示例以windbg加载calc.exe为例:1.!sym!sym扩展控制显示详细的符号加载和符号提示。.!sym :不带参数表示显示当前的详细符号加载和符号提示的设置状态给个示例:0:001> !sym!sym - noisy mode - symbol prompts on其实细心点可以看出sym的四种状态了,noisy/quiet -prompts/prompts off,所以我们要记这个命令的用法,就只要调用下!sym,就看到所有用法了.嘿嘿,我还比较聪明的后面表示当前的设定状态,!symnoisy激活详细符号加载(noisy symbol loading)显示。给个示例:0: 阅读全文

posted @ 2012-05-12 22:17 hgy413 阅读(3468) 评论(0) 推荐(0) 编辑

上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 39 下一页

导航