windbg !logexts(自带的监控API)

Logexts.dll

windbgth自带了跟进API的功能,这样我们可以方便的跟踪整个API的调用具体的示意图如下:

               

!logexts.logi
  将Logger注入目标程序,初始化监控,但是并不开启它。

!logexts.loge
  开启监控,如果之前没有调用logexts.logi,这个扩展命令会先初始化监控,然后启动。

!logexts.logd
  停止监控。这个命令会摘掉所有的Hook,从而让程序自由运行。不过COM的Hook并不会被摘除。

!logexts.logo
  显示或者修改输出选项,这里有三种输出方式:1.在调试器中显示,2.输出到一个文本文件,3.输出到lgv文件。其中lgv文件会包含更多的信息,我们可以使用LogViewer进行查看。

!logexts.logc
  显示或者控制监控的API分类。

!logexts.logb
  显示或者刷新输出缓存。由于如果在监控过程中发生异常,那么扩展可能无法将记录的日志写入文件中,这个时候我们就需要这个命令,手动的将缓存中的数据写入文件。

!logexts.logm
  显示和创建模块的包含/排除列表。这可以帮助我们指定记录那些特定模块中的API调用。

 

示例

!logexts.loge D:
设置log的保持路径,并且开启监控
!logexts.logc d *
先关闭所有API分类的监控
!logexts.logc
查看API分类id
!logexts.logc e 1
设置想监控API分类
!logexts.logo e *
开启了所有输出方式,注意:如果想要被监控的程序响应的更快,可以去掉Debugger的输出,因为显示花费的时间比较的多。
Logextse有高度可配置性。如果你想监控他描述以外的API,那么你可以自己写这个API的“头文件”。这里用引号是因为,它并不是真正的头文件,只不过他的语法和C的头文件非常的相似。我们可以看一个例子:
创建%windbg_dir%winextmanifestContext.h
并且写入这些内容

 

category ActivationContext:  
module KERNEL32.DLL:  
   
FailOnFalse ActivateActCtx(HANDLE hActCtx, [out] PULONG_PTR lpCookie);  
FailOnFalse DeactivateActCtx(DWORD dwFlags, ULONG_PTR upCookie);  

 

在%windbg_dir%winextmanifestmain.h文件的最后加入一行 #include “Context.h”
保存后,重启调试程序,输入!logexts.logc,可以看了多出了ActivationContext这一项。现在就可以选择这一项分类来监控ActivateActCtx和DeactivateActCtx了。
最后自己随便写了个简单的script调用:

.printf /D  "<link cmd=\"!logexts.loge c:\\cmdtree\\log\\ \">Enables logging</link>\n"  
.printf /D  "<link cmd=\"!logexts.logo e *\">sets Logger output</link>\n"  
.printf /D  "<link cmd=\"!logexts.logc e *\">Displays available API categories</link>\n"  
.printf /D  "<link cmd=\"!logexts.logb p;!logexts.logb f\">Displays current output buf</link>\n"  
.printf /D  "<link cmd=\"!logexts.logd\">Disables logging</link>\n"  
.printf /D  "<link cmd=\"!logexts.loge c:\\cmdtree\\log\\;!logexts.logc e *;!logexts.logo e *;!logexts.logb p;!logexts.logb f\">trace api calls</link>\n"  

效果如下:

    

 

posted @ 2016-12-19 18:32  任智康  阅读(1180)  评论(0编辑  收藏  举报