YiMiTuMi

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

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...

动态获取SSTD,并打印函数名、调用编号、函数地址

c++

动态获取KeServiceDescriptorTable(SSDT) 在windows系统中,32位系统是导出了SSTD的,我们可以通过全局的KeServiceDescriptorTable去获取: extern PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable; //只有在32位才能导出 在64位系统中,并没有导出函数地址...

获取SSTD函数调用索引号和ntoskrnl.exe函数地址

c++

获取SSTD函数调用索引号 参考 Windows在调用系统API时,通过ntdll.dll文件中的函数进入内核,每个函数在进入内核时都会有一个调用编号,这个调用编号被存放在eax中,windows通过这个编号在SSTD中查找对应的函数地址。 注意:ntdll.dll 导出表的函数编号并不是SSTD的函数编号,两者并不对应。并且已经公开的函数大多数是以NT开头的,还有一些为公开的是ZW。...

获取空闲端口号、判断是否在同一网段

c++

获取空闲端口号 当我们使用端口时要获取空闲的端口,端口数量最大为65536个。 通过Bind函数获取 SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(usPort); addr.sin_addr.s_...

驱动安装工具

c++、MFC

实现自己的驱动工具 用C++写了一个通用的类,之后用MFC写的界面调用的。主要就是掉函数安装。 C++类 CInStallDriver.h #include <WinSvc.h> #include <string> using namespace std; class CCInStallDriver { public: CCInStallDriver(v...