我们都知道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
|