3 鬼手56

尚未进行身份认证

暂无相关简介

等级
TA的排名 3w+

编译器扩展SEH

文章目录编译器扩展的SEH为什么需要编译器扩展的SEH编译器支持的SEH过滤表达式try_except的实现细节手动挂入链表自动挂入链表_try_except嵌套重复拓展的_EXCEPTION_REGISTRATION_RECORD结构体scopetable成员分析try_finally编译器扩展的SEH为什么需要编译器扩展的SEH之前我们已经了解过SEH的异常处理流程,SEH的处理流程实...

2020-02-16 18:25:21

VEH和SEH

文章目录VEHKiUserExceptionDispatcher函数分析代码实现添加VEH异常处理函数VEH异常的处理流程SEHExceptionListRtlDispatchException函数的执行流程代码实现添加SEH异常处理函数SEH异常的处理流程VEH当用户异常产生后,内核函数KiDispatchException并不是像处理内核异常那样在0环直接处理,而是修正3环EIP为KiUs...

2020-02-16 18:23:57

用户层和内核层异常的处理流程

文章目录内核层异常的处理流程用户层异常和内核层异常KiDispatchException函数详解RtlDispatchException函数的执行流程用户层异常的处理流程用户异常的处理流程内核层异常的处理流程之前已经了解过异常处理机制的执行流程:异常记录 异常分发 异常的处理。这次我们学习一下内核异常的分发与处理。用户层异常和内核层异常异常可以发生在用户空间,也可以发生在内核空间。无论是C...

2020-02-16 18:19:14

CPU和软件模拟异常的执行流程

文章目录CPU异常记录异常的分类CPU产生的异常软件模拟产生的异常CPU异常的处理流程CommonDispatchException函数分析总结模拟异常记录模拟异常的执行流程RaiseException函数分析KiRaiseException函数分析总结异常产生后,首先要记录异常信息(异常的类型 异常发生的位置等),然后要寻找异常的处理函数,我们称为异常分发,最后找到异常处理函数并调用,我们称为...

2020-02-16 18:15:44

APC机制详解

文章目录APC的本质APC队列APC结构APC相关函数KiServiceExitKiDeliveApc备用APC队列ApcState的含义挂靠环境下的ApcState的含义其他APC相关成员ApcStatePointerApcStateIndexApcStatePointer与ApcStateIndex组合寻址ApcQueueableAPC挂入过程KAPC结构挂入流程KeInitializeApc...

2020-02-15 12:45:23

进程线程007 进程挂靠与跨进程读写内存

文章目录进程挂靠进程与线程的关系线程与进程如何关联为什么需要ApcState.ProcessCR3的值可以随便改吗分析NtReadVirtualMemory函数总结跨进程读写内存跨进程操作NtReadVirtualMemory流程解析进程挂靠进程与线程的关系一个进程可以包含多个线程一个进程至少要有一个线程进程为线程提供资源,也就是提供CR3的值,CR3中存储的是页目录表的基址,CR3确定...

2020-02-12 20:39:41

进程线程006 Windows线程切换-线程优先级

文章目录内容回顾调度链表如何高效查找如果没有就绪线程怎么办内容回顾之前我们已经了解过,有三种情况会导致线程切换:当前线程主动调用API:API函数–>KiSwapThread–>KiSwapContext–>SwapContext当前线程的时间片到期:KiDispatchInterrrupt–>KiQuantumEnd–>KiSwapContext–>...

2020-02-12 20:36:53

进程线程005 SwapContext函数分析

文章目录线程切换与TSS内核堆栈内核堆栈结构调用API进零环SwapContext代码分析线程切换与FSSwapContext代码分析SwapContext的其他问题SwapContext有几个参数 怎么判断出来的?SwapContext在哪里实现了线程切换?0环的ExceptionList是在哪里备份的线程切换与TSSSwapContext这个函数是Windows线程切换的核心,无论是主动切...

2020-02-12 10:00:27

进程线程004 Windows线程切换的三种方式

文章目录主动切换(调用API)KiSwapContext函数分析哪些API调用了SwapContext函数总结时钟中断切换如何中断一个正在执行的程序系统时钟时钟中断的执行流程总结时间片管理1.时间片到期什么是时间片?时间片什么时候发生改变?CPU时间片到期了如何处理?CPU时间片总结2.存在备用线程总结主动切换(调用API)之前我们已经学习了模拟Windows线程切换的代码,里面用于线程切换的...

2020-02-12 09:49:16

进程线程003 模拟线程切换

文章目录示例代码关键结构体调度链表初始化线程堆栈线程切换被动切换主动切换线程调度总结之前我们已经了解过线程的等待链表和调度链表,为了更好的学习Windows的线程切换,我们要先读一份代码示例代码ThreadSwitch.h#pragma once#include <windows.h>#include "stdio.h"//最大支持的线程数#define MAXGMT...

2020-02-10 10:53:23

进程线程002 等待链表 调度链表

文章目录前言等待链表33个链表调度链表版本差异总结前言进程结构体EPROCESS(0x50和0x190)是2个链表,里面圈着当前进程的所有线程。对进程断链,程序可以正常运行,原因是CPU执行与调度是基于线程的,进程断链只是影响一些遍历系统进程的API,并不会影响程序执行。对线程断链也一样,断链后在Windbg或者OD无法看到被断掉的线程,但并不影响线程执行。等待链表线程有三种状态:就绪...

2020-01-01 13:40:48

进程线程001 进程线程结构体和KPCR

文章目录前言EPROCESSKPROCESS主要成员EPROCESS其他成员ETHREADKTHREAD主要成员介绍ETHREAD其他成员介绍KPCRKPCR介绍_NT_TIB主要成员介绍KPCR的其他成员介绍KPRCB成员介绍KPRCB成员介绍前言进程线程的知识点很多,如果我们想了解问题的本质,就要从一些关键的结构体学起,先来介绍一个与进程密切相关的结构体EPROCESS每个进程在零环都...

2019-12-26 21:33:05

系统调用004 SSDT

文章目录前言KeServiceDescriptorTableSSDTSSDT Shadow前言之前我们了解到通过KTHREAD结构体0xE0的位置可以找到系统服务表,这个位置是我们通过逆向得出的。实际上,WIndows提供了一个导出的全局变量,通过这个导出的全局变量,我们就可以直接访问系统服务表。KeServiceDescriptorTable用IDA打开ntkrnlpa.exe,在导出表...

2019-12-23 22:02:20

系统调用003 系统服务表

文章目录前言SystemServiceTable 系统服务表系统服务表在哪判断调用的函数在哪个表API函数的调用过程前言我们现在已经知道API怎么从三环进入零环,从三环进零环需要带两个寄存器,分别是eax和edx。eax保存的是系统的服务号,edx保存的是三环的esp,通过esp可以找到三环的参数。这次要解决的问题是如何通过eax找到零环的函数,零环的函数是怎么被调用的,并且零环的函数执行的...

2019-12-22 17:09:50

系统调用002 KiSystemService函数逆向分析

文章目录前言保存现场_KTRAP_FRAMEKRPCExceptionList_KTHREAD结构体先前模式抬高堆栈判断当前权限更新_KTRAP_FRAME保存三环的寄存器环境判断调试状态前言之前我们详细了解了API从三环进到零环的过程,API会通过两种方式进入到零环,如果通过中断门的方式进入零环,最终会进入到KiSystemService这个函数。接下来就来分析KiSystemService...

2019-12-22 14:21:28

系统调用001 API从三环进零环的过程

文章目录前言逆向分析ReadProcessMemoryNtReadVirtualMemory_KUSER_SHARED_DATASystemCall通过int 0x2E中断门进入零环通过sysenter快速调用进入零环总结总结前言在三环操作系统提供了各种API,这些API实际上只是一个暴露在三环的接口,真正的功能实现部分,最终都是要进到零环。逆向分析ReadProcessMemory###...

2019-12-21 17:43:34

[保护模式]PAE模式

文章目录PAE模式 2-9-9-12分页非PAE模式为什么是10-10-12PAE模式为什么是2-9-9-12总结PDPTE结构PTE结构PTE结构XD标志位(AMD中称为NX,即No Excetion)PAE模式 2-9-9-12分页非PAE模式为什么是10-10-12先确定了页的大小4K,所以后面12位的功能也就确定了。2的12次方为4096,也就是4KB。12位正好可以索引到每一个物...

2019-12-11 23:12:16

[保护模式]非PAE模式

文章目录PAE 物理地址扩展线性地址 有效地址 物理地址CR3PDE/PTE物理页的属性通过线性地址访问PDT和PTT指向PDT的线性地址 0xC0300000总结指向PTT的线性地址 0xC0000000/C0001000总结访问PDT与PTT公式总结PAE 物理地址扩展线性地址 有效地址 物理地址如下指令:mov eax,dword ptr ds:[0x12345678]这个地址如...

2019-12-09 22:30:52

[保护模式]任务段

文章目录TSS什么是TSSTSS的作用如何找到TSSTR寄存器读写将TSS段描述符加载到TR寄存器构造TSS段描述符修改TSSJMP 访问代码段JMP 访问任务段JMP FAR和CALL FAR访问任务段的区别TSS切换实验示例代码构造段描述符填充CR3TSS什么是TSSTSS是一块内存,大小为104字节,结构如图所示:结构体如下:typedef struct TSS { DWORD...

2019-12-04 21:16:48

[保护模式]中断门

文章目录要点回顾中断门IDT中断门描述符中断门实验示例代码构造中断门描述符修改IDT表中断现场中断返回为什么会PUSH EFLAGS寄存器调用门和中断门的区别要点回顾执行调用门的指令:call cs:eip。其中cs是段选择子,包含了查找GDT表的索引。但当CPU遇到了如下指令:int [index],查询的却是另外一张表,这张表叫IDT中断门IDTIDT表全称为中断描述符表,包含三种描...

2019-12-01 19:43:17

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。