YiMiTuMi

使我进步的不是谦虚,而是别人羡慕我时我的那份骄傲!

APC的本质

c++

APC的本质 线程是不能被“杀掉”、“挂起”、“恢复”的,线程在执行的时候自己占据着CPU,别人是不可能控制它的。 例如:如果线程不调用API,屏蔽中断,并保证代码不会出现异常,线程将永久占用CPU,所以说线程如果想停止,一定时自己执行代码把自己干掉,不存在被别的线程干掉的情况。 如果想改变一个线程的行为,操作系统给线程提供了一个函数,让线程自己去调用,这个函数就是APC(Asyncr...

管道异步通信

c++

管道异步通信 管道异步通信,我们通过在 CreateFile 和 CreateNamedPipe 中添加 FILE_FLAG_OVERLAPPED 来实现管道的异步通信也叫重叠I/O。 重叠I/o的使用:当你调用调用ReadFile和WriteFile时,结果立马返回,这样就可以去执行其他的代码,同时可以使用WaitForSingleObject和GetOverlappedResult来...

PE文件格式

c++

PE文件格式 建议自行百度。 VirtualAddress 转 PionterToRawData 1. 先判断是否在文件头中,文件头不会被拉伸 2. 判断那个节表: x > VirtualAddress x < VirtualAddress + misc.virtualSize 3. 找到对应节表后计算差值y: x - VirtualAddress = ...

句柄表

c++

句柄表 HWND和HANDLE不同,HWND与界面有关,下面只关心HANDLE句柄。 句柄表分为全局句柄表,和每个进程一个的自己的句柄表为私有句柄表。 当一个进程创建或者打开一个内核对象时,将获得一个句柄,通过这个句柄可以访问内核对象。 例: HANDLE g_hMutex = ::CreateMutex(NULL, FALSE, "XYZ"); //创建一个有名或无名的互斥量对象...

3环模拟线程切换

c++

3环模拟线程切换 线程切换实际就是切换保存线程的堆栈。 线程切换参数 结构体仿写 _EHREAD 中基本的字段。 //线程结构体(_EHREAD) typedef struct _IM_SWITCH_THREAD { char* name; //线程名 int iFlage; //线程状态 int SleepTime; //休眠时间 void* In...

进程与线程 -- 线程切换(二)

c++

进程与线程 – 线程切换(二) 3环模拟Windows线程切换 一个线程执行至少需要寄存器和堆栈,线程切换本质就是堆栈的切换。 线程切换分为两种:主动切换和被动切换。只要调用API就会发生主动切换,系统时钟属于被动切换。 每一个线程最开始执行的总是同一个StartUp(开始函数),然后在 StartUp 中调用自己的执行函数。 中断一个正在执行的程序: 1)异常:缺页,或者 IN...

进程与线程 -- 进程线程概念(一)

c++

进程与线程 – 进程线程概念(一) 创建进程: <1> 任何进程都是别的进程创建的: CreateProcess() <2> 进程的创建过程 1)映射EXE文件 2)创建内核对象EPROCESS 3)映射系统DLL(ntdll.dll) 4)创建线程内核对象ETHREAD 5)系统启动线程 (1)映射DLL(通过函数 ntdll.L...

系统调用

c++

系统调用 API函数的调用过程称为系统调用。 API函数调用过程: Kernel32.dll:最核心的功能模块,比如管理内存、进程和线程相关的函数等。 User32.dll:是Windows用户界面相关应用程序接口,如创建窗口和发送消息等。 GDI32.dll:图形设备接口,包含用于画图和显示文本的函数,比如要显示一个进程窗口,就调用了其中的函数来画这个窗口。 Ntdll.dll...

SSTD HOOK

c++

SSDT SSDT就是一个导出的全局变量,这个全局变量里面包含了系统服务表。windows内核导出了一个全局变量KeServiceDescriptorTable ,KeServiceDescriptorTable只提供了Ntoskrl.exe的系统服务表,没有提供 Win32K.sys的。同时在64位操作系统中,为了保护SSDT操作系统不再导出SSDT了。 动态获取SSDT、函数编号等 ...

Handle转换eProcess

c++

Handle转换eProcess 我们通过ObReferenceObjectByHandle,将句柄转化成所对应的类型可获取到相关数据。 包括: *ExEventObjectType, *ExSemaphoreObjectType, *IoFileObjectType, *PsProcessType, *PsThreadType, *SeTokenObjectType, *TmEnlis...