源码:一个OllyDbg的插件.调试输出重定向.

我们都知道OllyDbg会把目标调试程序中调用OutputDebugString输出的调试信息拦截.而OllyDbg的调试输出过滤等功能都不如DbgView.所以,如果你习惯使用DbgView,那这个插件是你需要的,它可以在不影响OllyDbg记录显示的情况下再输出一份调试信息到DbgView.

下面是代码:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; OD 的一个插件例子
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .386
  .model flat, stdcall
  option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data?
szDbgStr db 1024 dup (?)    ; 调试输出缓冲区
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; dll 的入口函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DllEntry proc _hInstance,_dwReason,_dwReserved

  mov eax,TRUE
  ret

DllEntry Endp
szPluginName  db  "调试输出重定向",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; OD 获取插件名称的函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ODBG_Plugindata proc C _lpStr

  pushad
  invoke lstrcpy,_lpStr,offset szPluginName
  popad
  mov  eax,06Ch  ; OD 版本信息(#define PLUGIN_VERSION 108)
  ret

_ODBG_Plugindata endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 初始化函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ODBG_Plugininit proc C _dwVersion,_hWnd,_Features

  xor  eax,eax
  ret
_ODBG_Plugininit endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 主循环函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ODBG_Pluginmainloop proc C stDE
  local @hProc

  pushad
  mov  edi,stDE
  .if  edi != 0
   mov eax,(DEBUG_EVENT ptr [edi]).dwDebugEventCode
   .if eax == OUTPUT_DEBUG_STRING_EVENT  ; 调试输出事件
    invoke OpenProcess,PROCESS_ALL_ACCESS,0,(DEBUG_EVENT ptr [edi]).dwProcessId
    .if eax != 0
     mov  @hProc,eax
     mov  edx,(DEBUG_EVENT ptr [edi]).u.DebugString.lpDebugStringData
     movzx ecx,(DEBUG_EVENT ptr [edi]).u.DebugString.nDebugStringiLength
     invoke ReadProcessMemory,@hProc,edx,offset szDbgStr,ecx,0
     invoke CloseHandle,@hProc

     invoke OutputDebugString,offset szDbgStr
    .endif
   .endif
  .endif
  popad
  ret
_ODBG_Pluginmainloop endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  End DllEntry

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值