- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 《Windows核心编程》之“同步IO和异步IO”
本文主要通过一张思维导图来总结Windows编程中关于设备IO的相关知识,其中,“IO Completion Port”后面会单独用一个系列文章进行介绍,在此不再展开。
2016-08-29 14:33:34 619
原创 《Windows核心编程》之“内核对象同步”
本文主要总结如何使用“kernel object”来实现线程间的同步。与用户模式下的同步方法相比,内核对象同步的效率会相对要低一些(需要切换到内核模式下),但是,它可以跨进程使用,而且在编程上也更简单。 除了总结知识点,我还分析了内核对象同步实现的Queue.exe的示例代码,并与上一篇的Queue.exe进行了简单对比。最后,我将介绍微软提供的一种诊断死锁问题的手段:Wait Chai
2016-08-26 11:01:59 698
原创 《Windows核心编程》之“用户模式同步”
本文我将用一张思维导图来总结“用户模式下线程同步”的各个知识点,然后再分析书中给出的“Queue”示例代码。Queue示例代码分析:一、功能简介 该示例实现了一个简单的“client/server”模式的“producer .vs consumer”案例。待保护资源是 一个全局queue,client端有四个writer线程向该queue发送入队request,并
2016-08-24 11:19:52 538
原创 《Windows核心编程》之“线程调度和优先级”
“线程调度和优先级”这一章主要讲解 Windows 的线程调度的机制,特别是线程上下文切换(context switch)。由于 Windows 并非“实时操作系统”,在线程调度方面留给程序员操作的空间很少,因此,这一章对实际编程的帮助并不大,如果仅仅是想了解一些基本原理,建议通读一遍即可,或者仅阅读前面 4 个小节。 本章最重要的一个概念就是“线程上下文切换”(context sw...
2016-08-23 11:04:14 826
原创 《Windows核心编程》之“线程基础”
本文主要介绍线程的一些基础知识,包括:线程内核对象、线程的创建和退出、线程的初始化和线程上下文等,可以用下面这张思维导图来总结。一、线程VS进程 内核对象 地址空间 进程 进程内核对象 进程地址空间 线程 线程内核对象 线程栈 进程是线程的容器,线程依赖于进程的上下文。 线程要在某个进程的地址空间内执行代码和处理数据。...
2016-08-22 16:43:59 447
原创 《Windows核心编程》之“进程”
本文我尝试用一张思维导图来总结我对《Windows核心编程》CH4“进程”这一章内容的理解,然后针对一些感兴趣的内容展开来谈谈我的理解。建议大家在阅读这一章时,认真阅读示例程序“ProcessInfo.exe”,它是一个迷你版的“procexp.exe”,通过对“ProcessInfo.exe”的学习,可以加深对 procexp.exe 的认识和掌握高级用法。 一、知识图谱...
2016-08-22 14:08:59 1158
原创 《Windows核心编程》之“内核对象”
内核对象(Kernel Object)是Winodws操作系统中最核心的一个概念,本章主要介绍“内核对象”整个抽象概念的共性,而不针对具体的某个内核对象。 这一章介绍了“内核对象”的公共属性:usage count(使用计数) 和 Security Descriptor (SD,安全描述符)、进程的内核对象句柄、内核对象的命名空间和跨进程共享内核对象。 要理解本章...
2016-08-19 11:17:38 3050
原创 《Windows核心编程》之“SEH”
SEH,Structured Exception Handling(结构化异常处理),包括两种类型:一是Termination Handling,即终止处理;另一个是Exception Handling。本文主要介绍Termination Handling。一、Advantages of Termination
2016-08-18 11:14:41 1165
原创 《Windows核心编程》之“API Hooking”(二)
前一篇主要讲“API Hooking”的原理——修改IAT,这一篇主要讲代码实现和调试。一、修改IAT 我们要修改IAT,首先要了解导入段的数据结构和操作API。1,IMAGE_IMPORT_DESCRIPTOR 在winnt.h文件中,定义了这么一个数据结构来描述导入段中的信息单元typedef struct _IMAGE_IMPORT_DESCRIPTOR {
2016-08-17 16:19:34 1136
原创 《Windows核心编程》之“API Hooking”(一)
《Windows核心编程》中介绍了两种API Hooking的方法 —— “Overwritting Code”(代码覆盖)和“API Hooking by Manipulating a Module's Import Section”(修改导入段)。本文在以学习这两种API Hooking为目的,介绍相关的内容,包括:API Hooking的作用、导入段的获取和修改、detours库、使用WM_
2016-08-17 11:11:33 2236
原创 《Windows核心编程》之“Windows挂钩”(三)
本文主要结合之前两篇介绍的“Windows挂钩”知识,讲解《Windows核心编程》一书中的“DIPS"示例程序和我的调试经验。一、程序功能介绍1,功能需求 DIPS.exe应用程序使用了Windows Hook来将一个DLL注入到Explorer.exe的地址空间中,并在内部给桌面的ListView控件发送LVM_GETITEM和LVM_GETITEMPOSITON消息
2016-08-12 14:56:21 1407
原创 《Windows核心编程》之“Windows挂钩”(二)
本文接上篇,继续探讨“Windows挂钩”,包括:跨进程的“窗口子类化”,使用Windows Hook注入DLL,跨进程窗口通讯,进程间共享内存和示例程序调试总结。
2016-08-11 16:54:18 1053
原创 《Windows核心编程》之“Windows挂钩”(一)
《Windows核心编程》一书中介绍了一种针对带窗口的Windows应用程序的“DLL注入”的方法——Windows Hook(窗口挂钩)。本系列文章将探讨这种技术的原理和分享我的实验心得。
2016-08-11 15:27:27 2524
原创 《Windows核心编程》之”DLL注入“(二)
本文接上一篇,开始介绍"DLL注入"的实现。一、DLL注入的方法 DLL注入的方法有很多,《Windows核心编程》中介绍了如下几种:1)使用注册表来注入DLL;2)使用Windows挂钩来注入DLL;3)使用远程线程来注入DLL;4)使用木马DLL来注入DLL;5)把DLL作为调试器来注入DLL;6)使用CreateProcess来注入DLL;
2016-08-09 16:55:22 3579
原创 《Windows核心编程》之“DLL注入”(一)
一、背景知识1,Private Address Space 在Windows操作系统中,每个进程都有自己私有的地址空间(private address space)。各个进程的地址空间(user partition)是相互独立的,尽管它们的地址编码范围相同(0x00010000 ~ 0x7FFEFFFF),但是它们对应虚拟地址的后备物理存储器一般都不相同(只读模式下的Imag
2016-08-09 16:29:26 7561
原创 《Windows核心编程》之“ASLR .vs Rebasing dlls”
《Windows核心编程》第14章最后部分提到了“ASLR - Address Sppace Layout Randomization,地址空间分布随机化”特性。该特性允许Windows在第一载入一个DLL时,为它选择一个不同的地址,而不是它的PE文件中指定的“prefered address”,默认为“0x10000000”。在载入DLL时,系统内核会执行ASLR基地址重定位(ASLR reba
2016-08-03 13:35:56 1704 1
原创 《Windows核心编程》之“内存映射文件”
一般来说,应用程序对文件的操作分为两类:第一类是操作文件本身,包括new、delete、cut、copy、paste以及获取或修改文件属性等操作;第二类就是操作文件的内容,包括:read、write以及文件指针,事实上,cut、copy和paste从实现上来说,也是文件内容操作。对于第二类操作,通行的做法是设计一个buffer(它对应进程地址空间的一个区域),先把待操作的内容读入到buffer,然
2016-08-01 10:59:35 1543
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人