从http://www.unixwiz.net/techtips/outputdebugstring.html这篇文章中可以知道,通过简单的几步设置,便可模拟OutputDebugString,可以用下面的代码描述:
struct dbwin_buffer {
DWORD dwProcessId;
char data[4096-sizeof(DWORD)];
};
void MyOutputDebugString(LPCTSTR lpOutputString)
{
static HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, // request full access
FALSE, // handle not inheritable
"DBWinMutex");
if(hMutex != NULL)
{
TSharedMem SharedMem("DBWIN_BUFFER", sizeof(struct dbwin_buffer));
if(!SharedMem.IsUnique())
{
HANDLE hBufEvent, hDataEvent;
hBufEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "DBWIN_BUFFER_READY");
if(hBufEvent != NULL)
{
hDataEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "DBWIN_DATA_READY");
if(hDataEvent!=NULL)
{
if(WaitForSingleObject(hBufEvent, 10000)==WAIT_OBJECT_0)
{
struct dbwin_buffer *buffer = (struct dbwin_buffer *)SharedMem.Buffer();
DWORD dwPID = GetCurrentProcessId();
memcpy(buffer, &dwPID, sizeof(DWORD));
lstrcpyn(buffer->data, lpOutputString, 4096-sizeof(DWORD));
SetEvent(hDataEvent);
}
CloseHandle(hDataEvent);
} //if(hDataEvent != NULL)
CloseHandle(hBufEvent);
} //if(hBufEvent != NULL)
} //if(!SharedMem.IsUnique())
ReleaseMutex(hMutex);
} //if(hMutex != NULL)
}
但,事实上,我在VS.NET2003的环境下,并不能向它的debugger输出任何内容,而且检测到并没有这个内存映射区域,也没有这2个Event,但同时,它仍能很好地拦截系统OutputDebugString的输出,看来它是通过API Hook之类的其它手段了。但我没有验证,尽管上面这段代码和OutputDebugString产生的输出都能很好地被LLYF DebugCapture这些程序拦截到。
分享到:
相关推荐
我们可以使用MFC提供的调试工具,如OutputDebugString函数输出调试信息,或者使用Visual Studio的调试器进行断点调试,以便找出和修复问题。 总的来说,基于MFC的单电梯模拟项目不仅涵盖了Windows编程的基本技术,...
本报告是关于基于Windows操作系统的进程互斥实现机制的课程设计报告,旨在验证多线程编程中关键元素的定义与使用,并通过使用Semaphore、Mutex等控制元素,实现对生产者消费者模型的真实模拟。 一、多线程编程的...
“vb”标签表明了这个项目使用的是Visual Basic编程语言,“cmd.EXE”则指明了这个项目是基于CMD.EXE的模拟。这意味着开发者使用VB编写了代码,使得用户可以在VB环境中执行类似于CMD.EXE的命令,如文件操作、系统...
标题中的"modem_VC++源码_"表明这是一个关于使用Visual C++(VC++)编程语言开发的调制解调器(Modem)程序的源代码集合。在早期的计算机网络中,调制解调器是连接拨号互联网的关键设备,它能够将数字信号转换为模拟...
调试信息通常通过CString类构建,并使用AfxTrace()或OutputDebugString()函数输出到调试窗口。 颜色、叶柄大小、转速等参数的调节,需要创建控件来接收用户的输入。MFC提供了多种控件类,如CButton(按钮)、CEdit...
21. **OllyDbg: OutputDebugString() FormatStringBug** - **原理**:OllyDbg中的一个格式化字符串漏洞。 - **示例**:利用这个漏洞进行攻击。 - **注意事项**:仅适用于特定版本的OllyDbg。 22. **TLS ...
9. **BlueScreen**:除了模拟蓝屏之外,还可以模拟Windows NT 4到Windows Server 2003的重启和chkdsk过程。 10. **CacheSet**:控制缓存管理器的工作集大小,适用于所有版本的Windows NT。 11. **ClockRes**:查看...
9. **日志记录和调试**:为了方便开发者调试和追踪软件运行过程,源码中可能有日志记录功能,使用如`fprintf`或Windows API的`OutputDebugString`来记录关键事件和信息。 10. **权限和权限提升**:为了访问受保护的...
在编程领域,时钟控制类通常用于创建模拟或真实时钟的应用程序,它可以提供时间的显示、设置和管理等功能。本实例将详细讲解一个名为"WinClock"的时钟控制类的实现,它是一个在Windows环境下操作的示例。通过分析`...
操作系统课程设计中的“消费者-生产者问题”是一个经典的多线程同步问题,它模拟了实际生产环境中的资源分配与消耗情况。在这个问题中,我们有生产者线程负责生成产品,而消费者线程则负责消费这些产品。资源池(如...
15. **DebugView**:捕获设备驱动程序的DbgPrint调用和Win32程序的OutputDebugString,无需调试器即可查看和记录调试信息。 16. **Desktops**:创建多个虚拟桌面,方便在不同工作环境间切换。 17. **Disk2vhd**:...
2. **虚拟机靶机**:虽然虚拟机靶机在某些情况下用于模拟和测试环境,但在本案例中,开发过程可以在Windows 10和Visual Studio 2019环境下直接进行,无需虚拟机。 3. **安全工具干扰**:安全软件如360可能会阻止或...
9. **安全和权限**: Windows API也提供了安全相关的函数,如CreateMutex用于创建互斥体以防止多个线程同时访问资源,ImpersonateLoggedOnUser允许程序模拟已登录用户的权限。 10. **多线程和同步**: 线程同步是多...
1. Windows的`OutputDebugString`函数:这是一个用于向调试器发送调试字符串的API,调试器可以通过例如Sysinternals的“DebugView”这样的工具来捕获这些字符串。这在开发阶段是非常有用的,因为它允许开发者在不...
2. **查看输出信息**:通过模拟调试设备,开发者可以查看由`OutputDebugString`函数发送的信息,这是在没有实际调试器连接时非常有用的调试手段。 3. **分析内存和资源使用**:了解程序运行过程中内存的分配和释放...
此屏幕保护程序不仅精确模拟“蓝屏”,而且也模拟重新启动(完成 CHKDSK),并可在 Windows NT 4、Windows 2000、Windows XP、Server 2003 和 Windows 9x 上工作。 CacheSet CacheSet 是一个允许您利用 NT 提供的...
此屏幕保护程序不仅精确模拟“蓝屏”,而且也模拟重新启动(完成 CHKDSK),并可在 Windows NT 4、Windows 2000、Windows XP、Server 2003 和 Windows 9x 上工作。 CacheSet CacheSet 是一个允许您利用 NT 提供的...
此屏幕保护程序不仅精确模拟“蓝屏”,而且也模拟重新启动(完成 CHKDSK),并可在 Windows NT 4、Windows 2000、Windows XP、Server 2003 和 Windows 9x 上工作。 CacheSet CacheSet 是一个允许您利用 NT ...
此屏幕保护程序不仅精确模拟“蓝屏”,而且也模拟重新启动(完成 CHKDSK),并可在 Windows NT 4、Windows 2000、Windows XP、Server 2003 和 Windows 9x 上工作。 CacheSet CacheSet 是一个允许您利用 NT 提供的...