winows内核
文章平均质量分 54
Aaronpack
只要不失去方向,就不会失去自己;
展开
-
Windows核心编程对于临界区的详细描述
临界区是指一个小代码段,在代码执行前能够独占某些资源的访问权;需要注意的是,系统仍然能够控制线程的运行,去安排其他线程。不过,在线程退出临界区之前,系统不会调度其他试图访问相同资源的线程。来看一段代码:const int p = 1000;//对这个全局变量进行操作int g_index = 0;DWORD g_time[p];DWORD WINAPI Thread1(DWORD pParam) { while (g_index<p) { g原创 2021-05-01 14:51:33 · 1359 阅读 · 3 评论 -
机器对移位运算的看法
先看左移运算,因为相对于右移较为简单;x向左移动K位,会丢弃最高的K位,并在右端补K个0,移位运算是从左到右课结合的,所以x<<j<<k等价于(x<<j)<<k;而对于右移运算,x>>K,一般而言,机器支持俩种右移方式,逻辑右移和算术右移,逻辑右移在左端补K个0,而算术右移在左端补K个最高有效位的值,这种方式对于有符号的运算是非常有效的,...原创 2021-03-11 17:35:24 · 1333 阅读 · 0 评论 -
内核函数KiInsertQueueApc说明
根据KAPC结构中的PpcStateIndex找到对应的A队列3在根据KAPC结构中的ApoMode确定是用户队列函数内核队列将KAPC挂到对应的队列中(挂 到KAPC的ApcKistEntry处)7在根据KAPC结构中的Inserted置1,标识当前的APC为已插入状态9修改KAPC_ STATE结构中的Kerne lApcPending/UserApcPending...原创 2021-02-08 20:47:00 · 1462 阅读 · 0 评论 -
内核篇-----APC队列介绍
APC队列kd> dt _KAPCnt!_KAPC +0x000 Type : Int2B //APC类型为0x12 +0x002 Size : Int2B //大小为0x30 +0x004 Spare0 : Uint4B +0x008 Thread : Ptr32 _KTHREAD//目标进程 +0x00c ApcListEntry : _LIST_ENTRY /原创 2021-02-08 20:44:14 · 1789 阅读 · 0 评论 -
内核篇-----用户APC
用户APC执行过程1.执行用户APC的堆栈操作线程从用户层到内核层时,要保留原来的运行环境;寄存器,栈的位置要切换回内核的堆栈,如果正常返回,恢复堆栈环境即可;但是要是有用户APC要执行的话,线程要提前返回到用户空间执行,而且返回的位置不是线程进入内核时的位置,而是返回到其他位置,每处理一个用户APC都会涉及到内核用户空间再回到内核空间(ZwContinue);KiIntializeUesrApc函数分析:备份CONTEXT 线程进0环时,原来的运行环境要保存到_Trap_Frame结构体中,如果原创 2021-02-08 20:41:36 · 1252 阅读 · 0 评论 -
内核篇-----备用APC
备用APC队列Kd>dt _KTHREADNt!_KTHREAD+0x034 ApcState :_KAPC_STATE+0x138 ApcStatePointer:[2]Ptr32_KAPC_STATE+0x14c SavedApcState :_KAPC_STATE+0x165 ApcStateIndex :UChar+0x166 ApcQueueable :UChar..1.SavedApcState的意义:A进程中的T线程中的所有APC函数,要访问的内存地址都是A进程的原创 2021-02-08 20:38:27 · 1100 阅读 · 0 评论 -
递进分析--MFC的本质
在微软设计MFC是为了使编程人员在实际开发过程中更方便快捷而设计的基础类库。MFC程序要遵循的一个过程是:进入WinMain函数,设计窗口类,创建窗口,显示窗口,更新窗口,然后进入消息循环;MFC本来就是基于消息循环创建的,如果没有消息循环,窗口会一闪而过;看代码: //消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg);//接收消息原创 2020-11-18 18:09:27 · 1107 阅读 · 0 评论 -
保护模式-段描述符和段选择子
保护模式段寄存器(96位)ES CS SS DS FS GS LDTR TRcs 为代码段寄存器,一般用于存放代码; 通常和IP 使用用于处理下一条执行的代码cs:IP基地址:偏移地址cs地址对应的数据 相当于c语言中的代码语句ds 为数据段寄存器,一般用于存放数据;ds地址对应的数据 相当于c语言中的全局变量ss 栈段寄存器,一般作为栈使用 和sp搭档;ss地址对应的数据 相当于c语言中的局部变量ss相当于堆栈段的首地址 sp相当于堆栈段的偏移地址es 为扩展段寄原创 2020-11-05 17:34:39 · 2021 阅读 · 0 评论 -
InLineHook原理
InLineHook原理:通过硬编码的方式先内核API的内存空间写入跳转语句,当程序跳转到我们的程序时,需要执行3个步骤:1,重新调整当前堆栈;需要保证内核API在执行完代码后返回我们的函数,就需要对当前的堆栈做调整;2,执行遗失的指令;执行我们的代码时,可能会覆盖内核API的指令,需要在我们的代码空间将遗失的指令补回来;3,信息过滤;根据返回结果做一些信息过滤,这些内容因被hook的API以及hook目的的不同而不同;InLineHook工作流程:1.验证内核API的版本2.撰写之间的函数,原创 2020-11-03 00:01:16 · 1540 阅读 · 0 评论 -
双机调试符号表
符号下载地址:https://pan.baidu.com/s/1vgYjWUYTwtb4MZVUu1P-8A 提取码:0nou原创 2020-09-08 23:18:03 · 1318 阅读 · 0 评论 -
双机调试完整步骤
双机调试完整步骤这样的调试如果不了解的话配置起来会很恶心,本人在配置第一遍的时候踩过很多雷,由于重装了系统,这是第二次装这个双机调试,希望可以帮到你;1.先要下载windbg和XP系统的虚拟机,我这里提供windbg下载资源和XP镜像系统;windbg下载地址:https://pan.baidu.com/s /1jJULExadpa0neyN7QvL5fw 提取码:2oktXP镜像系统:https://pan.baidu.com/s/1XAIjNnILF6kd22z9In7aRA 提取码:n原创 2020-08-18 18:11:32 · 4258 阅读 · 7 评论