浅墨浓香

想要天亮进城,就得天黑赶路。

导航

随笔分类 -  Windows核心编程

摘要:28.1 原始输入线程(RIT) (1)图解硬件输入模型 ①当操作系统初始化时会创建一个原始输入线程(RIT)和系统硬件消息队列(SHIQ),这两者是系统硬件输入模型的核心。当SHIQ队列有硬件(如鼠标或键盘)消息时,RIT被唤醒,并将事件添加到用户线程的VIQ队列。 ②任何时刻,只能有一个用户线程 阅读全文

posted @ 2016-03-19 19:08 浅墨浓香 阅读(831) 评论(0) 推荐(0) 编辑

摘要:27.4 唤醒一个线程 27.4.1 线程的挂起与唤醒 (1)当线程调用GetMessage或WaitMessage,而消息队列中又没有消息出现时,线程会被挂起。 (2)当消息被“Post”(也可以是线程间的“Send”)到消息队列时,相应的Wake标志位会被设置,以表明该线程可被调度。 27.4. 阅读全文

posted @ 2016-03-19 18:30 浅墨浓香 阅读(656) 评论(0) 推荐(0) 编辑

摘要:27.1 线程的消息队列 (1)Windows用户对象(User Object) ①类型:图标、光标、窗口类、菜单、加速键表等 ②当一个线程创建某个对象时,则该对象归这个线程的进程所有,当进程结束时,如果用户没有明确删除这个对象,则操作系统会自动删除这个对象。 ③窗口和钩子(hook)这两种用户对象 阅读全文

posted @ 2016-03-19 18:20 浅墨浓香 阅读(1094) 评论(0) 推荐(1) 编辑

摘要:26.1 Windows错误报告控制台 26.2 可编程了的Windows错误报告 26.3 对进程中的所有的问题报告进行定制 26.4 问题报告的创建与定制 26.4.1 创建一个自定义的问题报告 26.4.2设置报告参数:WerReportSetParameter 26.4.3 将小型转储文件放 阅读全文

posted @ 2016-03-18 21:27 浅墨浓香 阅读(371) 评论(0) 推荐(0) 编辑

摘要:25.1 UnhandledExceptionFilter函数详解 25.1.1 BaseProcessStart伪代码(Kernel32内部) void BaseProcessStart(PVOID lpfnEntryPoint) //参数为线程函数的入口地址 { DWORD retValue; 阅读全文

posted @ 2016-03-06 00:12 浅墨浓香 阅读(1214) 评论(0) 推荐(0) 编辑

摘要:24.1 程序的结构 (1)try/except框架 __try{ //被保护的代码块 …… } __except(except fileter/*异常过滤程序*/){ //异常处理程序 } (2)说明 ①当__try块中的代码发生异常时,__except()中的过滤程序就被调用。 ②过滤程序可以是 阅读全文

posted @ 2016-03-05 17:43 浅墨浓香 阅读(2231) 评论(0) 推荐(1) 编辑

摘要:23.3 终止处理程序 23.3.1 程序的结构 (1)框架 __try{ //被保护的代码块 …… } __finally{ //终止处理 } (2)__try/__finally的特点 ①finally块总是保证,无论__try块中的代码有无异常,finally块总是被调用执行。 ②try块后面 阅读全文

posted @ 2016-02-29 21:14 浅墨浓香 阅读(550) 评论(0) 推荐(0) 编辑

摘要:23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTION_REGISTRATION结构 (2)scopetable_entry结构体 (3)VC异常帧堆栈 阅读全文

posted @ 2016-02-27 23:23 浅墨浓香 阅读(867) 评论(0) 推荐(0) 编辑

摘要:23.1 基础知识 23.1.1 Windows下的软件异常 (1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障、陷阱和终止三类。 (2)两种异常处理机制:SEH和VEH(WindowsXP以上新引进) (3)结构化异常处理(SEH)是Windows操作系 阅读全文

posted @ 2016-02-21 19:46 浅墨浓香 阅读(1480) 评论(0) 推荐(0) 编辑

摘要:22.6 API拦截的一个例子 22.6.1 通过覆盖代码来拦截API (1)实现过程 ①在内存中对要拦截的函数(假设是Kernel32.dll中的ExitProcess)进行定位,从而得到它的内存地址。 ②把这个函数的起始的几个字节保存在我们自己的内存中。 ③用CPU的一条JUMP指令来覆盖这个函 阅读全文

posted @ 2016-02-11 21:01 浅墨浓香 阅读(2070) 评论(0) 推荐(0) 编辑

摘要:22.4 使用远程线程来注入DLL 22.4.1 概述 (1)远程线程注入是指一个进程在另一个进程中创建线程,然后载入我们编写的DLL,并执行该DLL代码的技术。其基本思路是通过CreateRemoteThread创建一个远程线程,并将LoadLibrary函数作为该线程函数来启动线程,同时将Dll 阅读全文

posted @ 2016-02-04 22:43 浅墨浓香 阅读(1071) 评论(0) 推荐(0) 编辑

摘要:22.1 注入的一个例子(跨进程子类化窗口) ①子类化窗口可以改变窗口的行为,让发往该窗口的消息重新发到我们指定的过程来处理。但这种行为只能在本进程中(如A),对于从一个进程(如B)去子类化另一个进程(如A)时,会遇到无法跨越进程地址空间的边界问题。 ②上图,进程B试图调用SetWindowLong 阅读全文

posted @ 2016-02-04 00:20 浅墨浓香 阅读(1965) 评论(0) 推荐(0) 编辑

摘要:21.1 动态TLS 21.1.1 为什么要使用线程局部存储 编写多线程程序的时候都希望存储一些线程私有的数据,我们知道,属于每个线程私有的数据包括线程的栈和当前的寄存器,但是这两种存储都是非常不可靠的,栈会在每个函数退出和进入的时候被改变,而寄存器更是少得可怜。假设我们要在线程中使用一个全局变量, 阅读全文

posted @ 2016-02-01 10:57 浅墨浓香 阅读(591) 评论(0) 推荐(0) 编辑

摘要:20.4 函数转发器(1)函数转发器原理(下图是利用Dependency Walker打开Kernel32.dll得到) ①图中CloseThreadpool*等4个函数转发到NTDLL中相应的函数中去了,但我们调用CloseThreadpool*等函数时,exe会被动态地链接到Kernel32.... 阅读全文

posted @ 2015-12-21 22:55 浅墨浓香 阅读(758) 评论(0) 推荐(0) 编辑

摘要:20.3 延迟载入DLL20.3.1延迟载入的目的(1)如果应用程序使用了多个DLL,那么它的初始化可能比慢,因为加载程序要将所有必需的DLL映射到进程的地址空间。→利用延迟加载可将载入过程延伸到执行过程时(2)如果我们的代码调用的操作系统的一个新函数,但程序又试图在老版本的操作系统运行。这时程序会... 阅读全文

posted @ 2015-12-02 23:44 浅墨浓香 阅读(1782) 评论(0) 推荐(1) 编辑

摘要:20.1 DLL模块的显式载入和符号链接20.1.1 显式载入DLL模块(1)构建DLL时,如果至少导出一个函数/变量,那么链接器会同时生成一个.lib文件,但这个文件只是在隐式链接DLL时使用(显示链接时并没有用到这文件)(2)显式载入DLL的函数:LoadLibrary(Ex) 参数含义pCTS... 阅读全文

posted @ 2015-11-27 22:26 浅墨浓香 阅读(1706) 评论(0) 推荐(0) 编辑

摘要:19.1 DLL和进程的地址空间(1)DLL的优缺点 ①有利于节省内存,多个进程能同时使用一个DLL,即在内存中共享DLL的单个拷贝,这节省了内存并减少了文件交换 ②促进了资源的共享,DLL里能够包含诸如对话框模版、字符串、图标以及位图之烊的资源。多个应用程序可以使用DLL来共享这些资源。 ③... 阅读全文

posted @ 2015-11-21 18:53 浅墨浓香 阅读(644) 评论(0) 推荐(0) 编辑

摘要:18.1 进程的默认堆(1)堆的特点 ①不必考虑分配粒度和页面边界问题,但分配和释放内存的速度比其他方式慢 ②堆是系统从页交换文件中预订的一块地址空间,系统会负责调拨和撤销调拨物理存储器。(2)进程默认堆 ①进程初始化时,系统会在进程地址空间中一个特殊的区域,这个区域为进程的默认堆(默认为1M... 阅读全文

posted @ 2015-11-08 11:45 浅墨浓香 阅读(573) 评论(0) 推荐(0) 编辑

摘要:17.8 稀疏调拨的内存映射文件17.8.1 稀疏文件简介(1)稀疏文件(Sparse File):指的是文件中出现大量的0数据,这些数据对我们用处不大,但是却一样的占用空间。NTFS文件系统对此进行了优化,那些无用的0字节被用一定的算法压缩起来。例如声明一个很大的稀疏文件(如100GB),这个文件... 阅读全文

posted @ 2015-11-07 17:25 浅墨浓香 阅读(2081) 评论(0) 推荐(0) 编辑

摘要:17.4映射到内存的可执行文件和DLL(1)EXE文件格式节名作用.text.exe和.dll文件的代码.data己经初始化的数据.bss未初始化的数据.reloc重定位表(装载进程的进程地址空间).rdata运行期只读数据.CRTC运行期只读数据.debug调用试信.xdata异常处理表.tls线... 阅读全文

posted @ 2015-10-31 21:45 浅墨浓香 阅读(1636) 评论(0) 推荐(0) 编辑