- 博客(9)
- 收藏
- 关注
原创 保护模式练习集合
在段寄存器中依赖两张表,全局描述符表(GDT)和局部描述符表(LDT),做个比方:当我们执行指令MOV DS,AX时,cpu会查表,会根据ax的值来查GDT表还是IDT表,表中所存在的就是段描述符。总结当S-DPL-P这几位组合的值是9或者F的时候代表的就是代码段或者数据段,在段描述符中的表现就是从左往右数第五位,当第6位大于等于8那么久代表是代码段,因为代码段TYPE位最高位是1。在TYPE中重要的三个位是WEA 从右往左含义就是,是否访问过,可读或者可写,扩展位---为0向上扩展,为1向下扩展。
2023-09-08 11:10:50
40
1
原创 保护模式-任务段
CPU根据NT位决定返回方式,如果NT=1,CPU使用TSS的 Previous task link 里存储的上一个任务的TSS选择子进行返回;和CALL FAR对比,NT位不会置1,TSS previous task link 也不会填充旧的TR,因此想要返回,可以先保存旧的TR,然后JMP FAR回去。JMP FAR 方式切换任务并不能提权,返回时要用先前保存的TR寄存器的值(原TSS选择子)返回。使用 CALL FAR 方式,EFLAGS 的 NT位置1,而JMP FAR 方式 NT位=0;
2023-08-29 22:42:35
44
1
原创 事件解释和演示代码
内核对象的销毁只受计数器的影响,比如A进程创建内核对象,暂时不销毁,这个时候B进程打开内核对象,能够获取值,同时将A进程中的内核对象句柄关闭,再创建C进程打开内核对象,这个时候发现虽然进程A创建内核对象也关闭了内核对象的句柄,但是内核对象并没有销毁,只要内核对象还在被使用,那么计数器就不为0,内核对象就不会被销毁,所以B保持内核对象打开,C是可以获取内核对象的,具体三个进程代码如下。进程2和进程3可以同时获取互斥体,但是不能同时释放,必要一个wait以后进行释放,另外一个才能wait然后释放。
2023-07-26 21:05:49
29
1
原创 信号量代码和解释
临界区是一段代码块或代码片段,用于保护共享资源,使得同一时间只能有一个线程进入这段代码,并且其他线程必须等待当前线程执行完毕才能进入。互斥体是一种同步原语,用于保护共享资源,同一时间只能有一个线程持有互斥体,其他线程必须等待互斥体的释放才能尝试获取它。临界区的实现由编程语言或操作系统提供,通常通过原子操作或锁定机制来保证同一时间只有一个线程可以进入临界区。互斥体通常由操作系统提供,并且有不同的实现,如临界区也可以使用互斥体来实现。信号量本身也是一个内核对象,用来同步控制。临界区和互斥体的区别。
2023-07-26 21:03:18
91
1
原创 进程创建-句柄表
那么这张句柄表有三个值,第一个是句柄,第二个是地址编号,第三个代表这个句柄能否被继承,如果值是0代表不能继承,如果值是1代表可以继承。程序->镜像->进程,简单的来说程序就是exe可执行文件,镜像就是拉伸后的imagebuf,那么只要我们给镜像一个eip他就可以跑起来,就形成一个进程。首先创建一个进程对象->分配4Gb的内存空间->做一个PEloader->创建一个线程,将进程基质+入口地址再扔给EIP 让进程跑起来。序,此时这是一个地址,如果直接返回三环,当这个地址。地址发生错误,会直接导致蓝屏。
2023-07-26 20:59:47
50
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人