2013年7月23日

【转】消息钩子注册浅析

摘要: 标 题:【原创】消息钩子注册浅析作 者:RootSuLe时 间:2011-06-18,23:10:34链 接:http://bbs.pediy.com/showthread.php?t=135702windows消息钩子很古老,但目前仍有很多地方需要用到,简单跟踪了一下函数执行流程,函数用法如下(MSDN):函数功能:该函数将一个应用程序定义的挂钩处理过程安装到挂钩链中去,您可以通过安装挂钩处理过程来对系统的某些类型事件进行监控,这些事件与某个特定的线程或系统中的所有事件相关.函数原形:代码:HHOOKSetWindowsHookEx(intidHook,HOOKPROClpfn,HINSTA 阅读全文

posted @ 2013-07-23 09:53 梦想Sky 阅读(1183) 评论(0) 推荐(0) 编辑

2013年6月25日

windows临界区

摘要: 临界区:临界区是一种轻量级机制,在某一时间内只允许一个线程执行某个给定代码段。通常在多线程修改全局数据时会使用临界区。事件、信号量也用于多线程同步,但临界区与它们不同,并不总是执行向内核模式的切换,这一转换成本昂贵。要获得一个未占用临界区,事实上只需要对内存做出很少的修改,其速度非常快。只有在尝试获得已占用临界区时,它才会跳至内核模式。这一轻量级特性的缺点在于临界区只能用于对同一进程内的线程进行同步。临界区由WINNT.H中所定义的RTL_CRITICAL_SECTION结构表示。WINBASE.H后您会发现:typedefRTL_CRITICAL_SECTIONCRITICAL_SECTIO 阅读全文

posted @ 2013-06-25 16:57 梦想Sky 阅读(3726) 评论(0) 推荐(0) 编辑

windbg定位死锁

摘要: 操作系统对死锁的描述如下:所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。那么为什么会产生死锁呢?1.因为系统资源不足。2.进程运行推进的顺序不合适。3.资源分配不当。而产生死锁的条件有四个:1.互斥条件:所谓互斥就是进程在某一时间内独占资源。2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。1)先用!locks查看所有的线程占用的锁这里可以看到有三个线程正在等待三个锁,第 阅读全文

posted @ 2013-06-25 15:50 梦想Sky 阅读(1524) 评论(0) 推荐(0) 编辑

2013年6月18日

Windows工作集内存

摘要: Windows任务管理器默认情况下,“内存(私人工作集)”列处于选中状态。私人工作集是工作集的一个子集,它是描述每个进程所使用的内存数量的技术术语。私人工作集专门描述了某个进程正在使用的且无法与其他进程共享的内存数量。内存 - 工作集是私人工作集中的内存数量与进程正在使用且可以由其他进程共享的内存数量的总和。内存 - 峰值工作集是进程所使用的工作集内存的最大数量。内存 - 工作集增量是进程所使用的工作集内存中的更改量。内存 - 提交大小是为某进程使用而保留的虚拟内存的数量。内存 - 页面缓冲池是可以写入其他存储媒体(例如硬盘)的某个进程的认可虚拟内存数量。内存 - 非页面缓冲池是无法写入其他存 阅读全文

posted @ 2013-06-18 14:52 梦想Sky 阅读(3209) 评论(0) 推荐(1) 编辑

2013年6月4日

WS_CLIPCHILDREN与WS_CLIPSIBLINGS 收藏

摘要: WS_CLIPCHILDREN与WS_CLIPSIBLINGS 收藏英文单词解释clip:夹子、子弹夹、回形针;夹住,修剪sibling:同胞兄弟或姐妹overlapped:重叠这两个Window Stype的特性与异同素来不太清楚,今日作一笔记:MSDN的解释为:WS_CLIPCHILDRENExcludes the area occupied by child windows when you draw within the parent window. Used when you create the parent window.WS_CLIPSIBLINGSClips child wi 阅读全文

posted @ 2013-06-04 10:21 梦想Sky 阅读(548) 评论(0) 推荐(0) 编辑

2013年5月17日

windows钩子

摘要: 1. 消息钩子提示: 如果要设置系统级钩子, 钩子函数必须在 DLL 中.SetWindowsHookEx( idHook: Integer; {钩子类型} lpfn: TFNHookProc; {函数指针} hmod: HINST; {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0} dwThreadId: DWORD {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}): HHOOK; {返回钩子的句柄; 0 表示失败}//钩子类型 idHook 选项:WH_MSGFI... 阅读全文

posted @ 2013-05-17 13:32 梦想Sky 阅读(976) 评论(1) 推荐(0) 编辑

2013年5月15日

windbg调试堆破坏

摘要: 堆破坏所谓的堆破坏,是说没控制好自己的指针,把不属于你分配的那块内存给写覆盖了。这块内存可能是你程序的数据,也可能是堆的管理结构。那么这个会导致怎样的后果呢?可能的情况我们来yy下把程序里的计算结果覆盖了,这也许会让你重复看了N次代码,校验了N次计算逻辑也搞不明白为何计算结果还是有问题堆管理结构被破坏了,new/delete,或者malloc/free操作失败等等等等~堆破坏较为理想的情况是被修改的数据会马上导致程序crash,最差的情况是你的堆数据莫名其妙在今天被改了,但明天才crash。这个时候在去分析crash,就如我们的警察叔叔现在接手一桩10年前的案子一般----无从下手。老外称之为 阅读全文

posted @ 2013-05-15 11:28 梦想Sky 阅读(13652) 评论(2) 推荐(2) 编辑

windbg调试HEAP

摘要: HEAP的概念堆栈堆栈,在操作系统内存中有两种存储空间,一个是堆,一个是栈。堆主要用于存储用户动态分配的变量,而栈呢,则是存储我们程序过程中的临时变量。当然栈的作用远不止用作存储变量,但这不是我们这篇文章的讨论内容。堆(HEAP)的分配,使用,回收都是通过微软的API来管理的,最常见的API是malloc和new。在往底层走一点呢,这两个函数都会调用HeapAlloc(RtlAllocateHeap)。同样的相关函数还有HeapFree用来释放堆,HeapCreate用来创建自己的私有堆。下面是这些函数的调用链:HeapCreate->RtlCreateHeap->ZwAlloca 阅读全文

posted @ 2013-05-15 10:49 梦想Sky 阅读(4929) 评论(0) 推荐(0) 编辑

2013年5月14日

vs2010断点调试技巧

摘要: 如何设置条件断点 设置条件断点非常容易。在特定的行上,按F9设置断点。 然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“Condition…”。 这时弹出一个对话框供你设置激活该断点所需的条件。比如:我们希望只有当局部变量paginatedDinners的尺寸小于10时,调试才中断。我们可以写出如下的表达式: 现在我再运行这个程序,实现搜索,只有返回值小于10时,程序运行才会被中断。对于大于10的值,该断点将被跳过。 记录到达断点次数 有时你希望,只有当第N次满足条件的运行到达断点时,才中断程序运行。例如:当第五次返回少于10份晚餐的查询结果时,中断程序运行。 可以通过右... 阅读全文

posted @ 2013-05-14 18:06 梦想Sky 阅读(17256) 评论(0) 推荐(2) 编辑

VC 调试技巧

摘要: 1.如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Link标签中选Generatedebu复选框。注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。(因为Relea 阅读全文

posted @ 2013-05-14 17:55 梦想Sky 阅读(2440) 评论(0) 推荐(0) 编辑

导航