自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 mysql的语句

【代码】mysql的语句。

2023-12-07 17:52:42 399

原创 UDP-完成端口模型

客户发送端用C/S模型即可。

2023-08-30 21:29:28 142

原创 UDP-事件模型

由于UDP是无绑定通信故没有 ACCEPT和CLOSE,比较简单。

2023-08-27 13:42:46 79

原创 TCP-完成端口

【代码】TCP-完成端口。

2023-08-25 14:21:09 92

原创 TCP-重叠IO-回调机制

【代码】TCP-重叠IO-回调机制。

2023-08-24 14:34:52 1092

原创 TCP-重叠IO-事件模型

新函数使用异步的方式,解决了老函数的阻塞问题,就是代码看的头疼,关闭客户端server接收不到消息。

2023-08-23 13:40:40 54

原创 TCP-消息队列模型

利用windows的消息队列函数,对比事件消息,好处是消息接收更合理,按客户端发送消息的顺序会依次处理,但是由于send accept recv这些函数天生存在缺陷,是同步处理的,这些函数必须处理完一个消息才能往下处理另一个消息,会造成堵塞,故windows设计了了新的套接字类型WSAsocket ,新函数AccpetEx WSAaccept WSAsend,这些函数采用异步方式,解决了堵塞。

2023-08-21 21:57:32 562

原创 TCP-事件模型

利用windows的网络事件函数,系统将自动用异步的方式帮我们查看socket消息。

2023-08-20 21:09:30 622

原创 TCP-select网络模型

select是将阻塞变成半阻塞,本质是把客户端socket放进数组里,然后遍历数组查询哪个socket有消息。

2023-08-18 12:35:28 397

原创 1.UDP/IP

【代码】1.UDP/IP。

2023-08-14 22:44:28 82

原创 页帧的寻找

一、内核对物理内存的管理(MmPfnDatabase)Windows通过几个全局变量来对物理内存进行管理:MmPfnDatabase,页帧数据库(也叫FPN数据库),是MMPFN结构体类型的数组,它的索引是物理地址页帧号。1: kd> dq mmpfndatabasefffff800`04119228 fffffa80`00000000 000001f4`00000040fffff800`04119238 00000000`00000390 00000000`00000000f..

2022-03-30 21:07:52 806 1

原创 1.IDA

11.搜索结构体:打开结构体界面,按Insert

2021-09-15 23:15:48 123

原创 30.枚举进程线程对象回调

技术分享 - 枚举并删除系统上ObRegisterCallbacks回调 (write-bug.com)

2021-09-15 21:01:25 160

原创 29.消息队列

1.系统共有两种进程,一种是SSDT进程,另一个是SSDT_Shadow2.SSDT函数在ntoskrnl.exe里,SSDT_Shadow函数在win32k.sys里3.凡是调用过win32k.sys里的函数,内核就会分配一个消息机制,在kthread.win32thread,这个指针指向消息队列的结构体...

2021-08-09 11:27:30 100

原创 28.探秘_OBJECT_TYPE结构

首先,每个进程/线程对象上面都有个_OBJECT_HEADER结构,而句柄结构在这个结构的后面,64位下这个结构大小为0X30以进程结构体举例:nt!_OBJECT_HEADER +0x000 PointerCount : Int8B +0x008 HandleCount : Int8B +0x008 NextToFree : Ptr64 Void +0x010 Lock : _EX_PUSH_LOCK +0x018 T

2021-08-03 16:20:41 1347

原创 26.全局句柄表PspCidTable

https://www.cnblogs.com/kuangke/p/5761615.html

2021-07-22 00:04:21 823

原创 25.句柄表

32位参考:https://blog.csdn.net/Kwansy/article/details/10980172264位一级句柄表

2021-07-21 16:32:52 528

原创 4.MDL的相关知识

MDL函数命令:https://blog.csdn.net/cosmoslife/article/details/50395985MDL共享内存:https://blog.csdn.net/cosmoslife/article/details/50395985https://www.cnblogs.com/lzjsky/archive/2010/11/19/1881911.html

2021-05-25 14:18:40 134

原创 1.临界区

临界区 指的是一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用。其实跟互斥锁差不多. class 临界区{public: 临界区() { ::InitializeCriticalSection(&lock_); //初始化临界区 } ~临界区() { ::DeleteCriticalSectio...

2021-05-15 19:40:14 2841

原创 24.自旋锁

自旋锁防止重入,简单说就是排队,必须等上一个请求执行完,下一个请求才能执行。//初始化自旋锁KSPIN_LOCK SpinLock;KeInitializeSpinLock(&SpinLock)//上锁KIRQL OldIrql;KeAcquireSpinLock(&SpinLock,&OldIrql)//解锁...

2021-04-16 16:50:15 130

原创 23.IRQL中断

一丶IRQL1.了解什么是中断中断就是产生的一个电信号.比如键盘.当按下就会产生电信号发送给CPU而CPU就会停止当前处理.去执行电信号.他是根据IRQL中断级别来进行处理的.如下图:中断说白了就是个电信号.打断CPU执行的代码. 去调用中断处理函数.此时CPU就处于硬件上下文.2.IROL中断级别.因为会产生很多CPU电信号.所有硬件同是发送中断处理级别怎么办.所以需要为这些级别分一个优先级. CPU会先执行优先级高的.会把优先级低的给屏蔽掉.当CPU处于中断上下文的时候.

2021-04-14 10:53:39 312

原创 22.驱动编程

https://blog.csdn.net/kwansy/category_10411796_2.html有基础不用看了

2021-04-14 10:12:26 107

原创 21.控制寄存器(CR0-CR4)

https://blog.csdn.net/Kwansy/article/details/109018064

2021-04-10 21:40:06 635

原创 20.TLB

https://blog.csdn.net/Kwansy/article/details/108997249

2021-04-07 22:30:28 137

原创 19.x64下算出PTE

X64下用的是9-9-9-9-12的分页模式,PML4E-PDPTE-PDE-PTE-偏移,线性地址的前16位是作符号扩展,后48位是分页模式.1.PTE是直接指向物理内存的,X86下有个固定的页目录表0xc0000000可得到所有地址信息,X64下为了安全起见,页目录表随机了,文章末有分析如何得到。一、PTE的算法:1.已一个线性地址为例0xfffffa801a628b30,下面先拆分 PML4E:1111 1010 1 1F5PDPTE:000 000...

2021-04-05 23:38:36 1143 2

原创 18.9-9-9-9-12分页

https://www.cnblogs.com/lanrenxinxin/p/4735027.htmllPML4E接着再看PML4E的结构,如图:PML4E并没有PS标志位,因此第7位是保留的,而PML4E提供的PDPT的物理基地址也受之前的MAXPHYADDR规则的约束。lPDPTE然后就是PDPTE结构:由于新增了1G 页面,因此在PDPTE结构里将控制1G的页面转化,由PDPTE.PS标志位进行转换,如图:当PDPTE.PS=1,也就是...

2021-04-01 23:15:56 260

原创 17.2-9-9-12分页

https://blog.csdn.net/Kwansy/article/details/108956971

2021-03-29 16:06:42 154

原创 16.页目录表基址

111

2021-03-28 22:47:38 200

原创 内核归纳合集

https://www.cnblogs.com/weekbo/p/12670046.html

2021-03-28 22:05:53 93

原创 11.任务段及任务门

了解三个概念:1.TSS任务段,共104字节,位于内存中2.TR段寄存器,共96位,位于CPU内3.TSS段描述符,位于GDT表TSS(Task-state segment)是一块104字节的内存,用于存储大部分寄存器的值;TSS设计出来的目的是任务切换,或者说是一次性替换一大堆寄存器。TR寄存器存储了TSS的地址,大小,和TSS门描述符选择子;TSS描述符是GDT表中的一项,操作系统启动时,从门描述符取值初始化TR寄存器。...

2021-03-22 15:34:43 200

原创 15.PDE和PTE属性

一、PDE PTE 结构低12位是权限位。低1位是P位,P=1代表有效,P=0代表无效低2位是RW位,RW=0表示只读,RW=1表示可读可写。二、修改常量区数据C语言中,修改常量区的字符串是不允许的,原因是物理页不具有写权限。按10-10-12模式拆好了线性地址,现在只要在windbg中找到PDE和PTE,将低2位改成1即可。0x4158181 (1*4)0000010101 (0x15*4)100000011000 (0x818)...

2021-03-12 13:15:10 1456

转载 14.修改 PTE 实现挂物理页读写空指针

一、10-10-12二级映射下图是101012二级映射结构:CR3寄存器存放物理地址,指向的是页目录表(PDT)页目录表(PDT)大小是4KB=4096字节,每个成员(PDE)占4字节,所以共有1024个PDE指向页表(PTE),PTE指向物理页PDE和PTE后六位都是属性PTE特征:1.可以不指向物理页2.多个PTE可以指向同一个物理页3.一个PTE只能指向一个物理页二、读写NULL指针正常编程中,不能读写NULL,原因是NULL指针没有对应的物理页.

2021-03-09 20:32:21 351

原创 13.10-10-12分页

一、概念铺垫mov eax,dword ptr ds:[0x12345678]上面这条mov指令中,0x12345678 是有效地址,ds.base+0x12345678是线性地址。每个进程都拥有“4GB”地址空间,这4GB实际上并不存在,数据真正存储在“物理地址”中。在10-10-12分页模式下,一个线性地址分为3部分:二、设置系统分页模式为10-10-12模式将boot.ini文件中的启动参数,noexecute改成execute。如图:...

2021-03-09 14:03:32 393

原创 10.陷阱门

一、陷阱门8-12:1111(F)32位下,中断门是0xE,陷阱门是0xF。使用上也没什么区别,除了一点:中断门会将IF位置0,而陷阱门不会。IF置0表示不响应可屏蔽中断,IF置1表示响应可屏蔽中断。IF对不可屏蔽中断无影响。键盘输入就是可屏蔽中断,按电源键就是不可屏蔽中断。...

2021-03-08 21:43:06 103

原创 9.中断门

1.IDT2.IDT构成3.中断门描述符Offset低四字节 0-15 和高四字节 16-31 =32位代码段偏移地址地址Seletor:代码段选择子 (16-31)0-7:为08-12:1110代表为中断门P:1 代表描述符有效DPL:3...

2021-03-08 20:28:27 82

原创 8.调用门

调用门提权,在R3实现R0的权限。一、调用门的执行流程满足以下条件的描述符才是调用门1. S=0 必须是系统段2.TYPE 是1100的样式调用门的选择子是低四字节的16-31位调用门的(高16-31位)+(低0-15位)+(调用门的选择子的BASE)=真正执行的地址...

2021-03-04 20:55:50 217 1

原创 7.跨段跳转,短调用和长调用堆栈图

一、回顾上一节,我们学习了 JMP FAR 实现段间跳转,该指令修改了 CS 和 EIP。本节我们学习长调用 CALL FAR,该指令除了修改 CS和EIP,还会修改堆栈。二、CALL 堆栈图学习长调用之前,不妨先回顾一下短调用CALL的堆栈图:三、长调用CALL FAR 和 RETF 一般是成对的,RETF 的执行流程(权限控制)和 CALL FAR 是一样的CALL FAR 不提权3环跳转到另一个3环代码段,不会切换堆栈。CALL FAR 提权从3环跳转到0环,此

2021-03-03 15:35:44 221

原创 6.JMP FAR段间跳转(长跳)

一、知识点回顾在前面的课程中我们学习了MOV和LES等修改段寄存器的指令,当时老师说过,CS寄存器比较特殊,不能用MOV和"LCS"进行修改,原因是CS和EIP共同决定下一条指令的地址,要修改CS,就必须同时修改EIP,这也是X86没有提供"LCS"指令的原因。...

2021-03-02 16:48:30 1248

原创 5.段权限检查

一.CPL:当前特权级用途:可根据CPL的值得知当前程序处于哪一环cs/ss段寄存器段选择子的低两位是CPL (cs和ss的后两位永远一致)1.如何查看程序处于几环cs/ss后两位=0代表当前运行在0环cs/ss后两位=3代表当前运行在3环二.数据段权限检查DPL是段描述符的权限属性,要想访问一个段描述符数据段,段选择子和CPU当前权限必须高于或等于DPL。要注意,权限数值越低,权限越高,比如我们常说的0环,就是权限最高的。RPL:段选择子的权限DPL:段描述符的权限..

2021-03-02 14:13:05 176

原创 4.段描述符 D/B位

这节的内容不太重要,记录下来,证明自己学过,以后遇见了不慌。D/B位对不同的段寄存器影响也不同,所以分别讨论。对DS,ES等数据段:D=1,段上限为4GBD=0,段上限为64KB对SS段:D=1,使用32位堆栈指针寄存器;D=0,使用16位堆栈指针寄存器.对CS段:D=1,采用32位寻址方式;D=0,采用16位寻址方式。...

2021-03-01 22:16:49 268

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除