随笔分类 -  Win32核心

摘要:原文链接如何启用内存泄漏检测机制? VC++ IDE 默认是没有启用内存泄漏检测机制的,即使某段代码有内存泄漏,调试会话的 Output 窗口的Debug 页不会输出有关内存泄漏信息。需要两步来启用内存泄漏检测机制。 第一步,使用调试堆函数(crtdbg.h): [代码]crtdbg.h 头文件,可以将 malloc 和 free 函数映射到其“调试”版本 _malloc_... 阅读全文
posted @ 2009-07-13 22:14 辛勤耕耘 阅读(983) 评论(0) 推荐(1)
摘要:来源:Intetnet 1 进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行... 阅读全文
posted @ 2009-07-10 23:27 辛勤耕耘 阅读(407) 评论(0) 推荐(0)
摘要:Windows进程有私有的内存空间, 但内核态的操作系统和设备驱动代码, 共享单一(a single)虚拟内存空间。虚拟内存的每一页都被标记(tagged )了读写需要的处理器访问模式。系统空间的页只能在内核态访问,用户地址空间在用户态可以访问。只读页(例如包含可执行代码的页)任何模式下都不可改写。   The four basic types of user-mode process... 阅读全文
posted @ 2009-07-01 14:46 辛勤耕耘 阅读(724) 评论(0) 推荐(0)
摘要:去原文   什么是链接器? 链接器的工作是把一个或多个目标模块(典型地,就是OBJ文件)组合成一个可执行文件(也就是EXE或DLL)。 什么是目标模块呢? 目标模块是由一个程序产生的,这个程序把人类可读的文本转换成CPU可以理解的机器代码和数据。对于C++来说,C++编译器读取C++源文件。对于汇编语言来说,汇编程序(例如MASM)读取汇编语言(ASM)文件,这种文件包含与CP... 阅读全文
posted @ 2009-06-26 12:28 辛勤耕耘 阅读(583) 评论(0) 推荐(0)
摘要:去第一部分Part1   第二部分    在本文的第一部分中,我首先对可移植可执行文件进行了全面的介绍。我讲了PE文件的历史和组成PE文件头的数据结构,还讲了节表。PE文件头和节表告诉你在可执行文件中都包含什么类型的代码和数据,以及在哪里能找到它们。   本月我要讲一下常见的节。最后讲一下我的最新的经过彻底改进的PEDUMP程序,它可以在2002年2月的专栏... 阅读全文
posted @ 2009-06-26 11:43 辛勤耕耘 阅读(707) 评论(0) 推荐(0)
摘要:An In-Depth Look into the Win32 Portable Executable File Format 作者:Matt Pietrek   “探索PE文件内幕——Win32可移植可执行文件格式之旅”已经过时了。我要用两部分系列的文章来补救这种情况。 让我先举一些例子来说明自从1994年我写那篇文章以来有关可执行文件方面都发生了哪些变化。由于16位Windows®已... 阅读全文
posted @ 2009-06-26 11:33 辛勤耕耘 阅读(933) 评论(0) 推荐(0)
摘要:Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,... 阅读全文
posted @ 2009-06-26 08:46 辛勤耕耘 阅读(1211) 评论(1) 推荐(1)
摘要:Windows模块加载过程两步骤:      第一步是把EXE或DLL映射进内存。此时加载器查看模块的导入地址表(IAT)来判断这个模块是否依赖于其它DLL。如果它依赖的DLL还未被加载进那个进程,加载器也将它们映射进内存。这个过程递归进行,直到所有依赖的模块都被映射进内存。要查看一个可执行文件隐含依赖的所有DLL,最好的方法是使用Platform SDK... 阅读全文
posted @ 2009-06-25 14:08 辛勤耕耘 阅读(1918) 评论(0) 推荐(0)
摘要:1.结构化异常处理 SEH是由编译器实现的,不同编译器在实现SEH时会有些区别。它是Winodws特有的技术。 SEH和C++异常是两种不同的异常机制。在VC中C++异常是基于SEH实现的。 2.结构化异常处理用法 (1)__try __try后必须接__finally和__except中的一个,且只能有一个。 若__try中有return,break,continue等语句,在执行这些语句前... 阅读全文
posted @ 2009-06-17 10:45 辛勤耕耘 阅读(1320) 评论(0) 推荐(0)
摘要:1.概览 .构造DLL (1)仅导出函数 DLL可以导出全局变量和类,但我们不建议这么做,建议导出函数。 (2).lib 每个DLL都有与之相对应的.lib文件,该文件中列出了DLL中导出的函数和变量的符号名 (3)指定要导出的函数名 因为不同编译器的Name mangle规则不同,这就导致DLL不能跨编译器使用。 有以下两种方法可以解决这个问题: 1.在.def文件中指定要导出的函数名... 阅读全文
posted @ 2009-06-17 10:44 辛勤耕耘 阅读(758) 评论(0) 推荐(0)
摘要:目的:减少创建与撤销线程以及切换的额外开销, 简单实现分析:首先创建一个信标对象hSemaphore(初始化:可以容纳最多的作业数max,当前资源数为0)。然后创建一定数量的工作线程(WorkThread),比如10个线程,这些线程都在循环中WaitForSingleObject(hSemaphore)。由于一开始信标的当前资源数是0,所以信标是unsigned,那么所有线程都处于等待状态。另创... 阅读全文
posted @ 2009-06-17 10:43 辛勤耕耘 阅读(419) 评论(0) 推荐(0)
摘要:1.概览 (1)什么时内存映射文件 内存映射文件是由一个文件到一块内存的映射,使进程虚拟地址空间的某个区域与磁盘上某个文件的部分或全部内容的建立映射。建立映射后,通过该区域可以直接对被映射的磁盘文件进行访问.而不必执行文件I/O操作也无需对文件内容进行缓冲处理。就好像整个被映射的文件都加载到了内存一样,因此内存文件映射非常适合于用来管理大文件。 注:与虚拟内存使用的是Page file不同,内存... 阅读全文
posted @ 2009-06-17 10:42 辛勤耕耘 阅读(760) 评论(2) 推荐(0)
摘要:Windows内存构架1.进程虚拟地址空间 每个进程都有自已的私有的虚拟地址空间,在32位机器上是4G,在64位机器上是16EB。 进程内的线程只能访问其所属进程所占的内存,其它进程的内存对其而言是不可见的,无法访问到。 2.虚拟地址空间是如何划分的 以32位 x86进程的虚拟地址被分成四个区域(Partition) (1)空指针区域 0x00000000 ~ 0x0000FFFF 专门留出... 阅读全文
posted @ 2009-06-17 10:41 辛勤耕耘 阅读(486) 评论(0) 推荐(0)
摘要:1.打开和关闭设备对象 打开设备 CreateFile CreateMailslot CreateNamedPipe CreatePipe 关闭设备CloseHandle CloseSocket 查看设备类型 GetFileType 各个设备的创建函数使用:File CreateFile (pszName is pathname or UNC pathname). Directory Create... 阅读全文
posted @ 2009-06-17 10:40 辛勤耕耘 阅读(1085) 评论(0) 推荐(0)
摘要:效率you should try to use nonshared data first and then use volatile reads, volatile writes, interlocked APIs, SRWLocks, critical sections. And if all of these won't work for your situation, then and on... 阅读全文
posted @ 2009-06-17 10:31 辛勤耕耘 阅读(593) 评论(0) 推荐(0)
摘要:1.挂起和恢复线程 (1)ResumeThread 被挂起的线程不会被调度,只有线程调用ResumeThread()的次数等于SuspendThread()时,线程才会被调度。(2)SuspendThread 当线程正在堆分配内存时(会给这个堆加上锁),此时如果将线程挂起,其它线程若想在堆上分配内存则会进入无限等待 直到堆的锁被挂起的线程解开。从而导致死锁。 [代码]尽量不要在外面调用 Sus... 阅读全文
posted @ 2009-06-17 10:25 辛勤耕耘 阅读(668) 评论(0) 推荐(0)