10.Windows线程切换_FS段寄存器
FS:[0]寄存器在3环时指向TEB.进入0环后FS:[0]指向KPCR
系统中同时存在很多个线程,这就意味着FS:[0]在3环时指向的TEB要有多个(每个线程一份)。
但在实际的使用中我们发现,当我们在3环查看不同线程的FS寄存器时, FS的段选择子都是相同的,那是如何实现通过一个FS寄存器指向多个TEB呢?
下面是ida的分析SwapContext代码
; CODE XREF: SwapContext+85j; SwapContext+AEj
mov eax,[ebx+KPCR.NtTib.Self] ; 取出目标线程的TEB
mov ecx,[ebx+KPCR.GDT] ; 获取GDT
mov [ecx+3Ah], ax ; 修改GDT表中的段描述符基址 AX存储地址的低2字节 存储到段描述符低4字节的第16:31位
shr eax, 10h ; 右移16位得到地址的高2字节
mov [ecx+3Ch], al ; 修改高4字节的0:7位
mov [ecx+3Fh], ah ; 修改高4字节的31:24位
inc [esi+ETHREAD.Tcb.ContextSwirches] ; 目标线程的ContextSwitches+1这个值应该是用了统计切换次数
inc [ebx+KPCR.PrcbData.KeContextSwitches] ; 当前CPU的K额ContextSwitches统计信息
pop ecx
mov [ebx], ecx
cmp [esi+ETHREAD.Tcb.ApcState.KernlApcPending],0
jnz short loc_404A00
popf
xor eax, eax
retn
10.Windows线程切换_FS段寄存器相关推荐
- Windows核心编程_FS段寄存器
Windows核心编程_FS段寄存器 FS段寄存器Windows用来存储一些进程信息的,FS段的首地址是存储这些进程信息的首地址:在内核态FS指向GDT表的:0x30地址, 在用户态FS=0x3B 也 ...
- 9.Windows线程切换_TSS
SwapContext这个函数是Windows线程切换的核心,无论是主动切换还,是系统时钟导致的线程切换,最终都会调用这个函数. 在这个函数中除了切换堆栈以外,还做了很多其他的事情,了解这些细节对我们 ...
- 进程线程004 Windows线程切换的三种方式
文章目录 主动切换(调用API) KiSwapContext函数分析 哪些API调用了SwapContext函数 总结 时钟中断切换 如何中断一个正在执行的程序 系统时钟 时钟中断的执行流程 总结 时 ...
- Windows线程同步--关键段和旋转锁
关键段 关键段(Critical Section)是一小段代码,它在执行之前需要独占对一些共享资源的访问权.这种方式可以让多行代码以"原子方式"对资源进行操控.这里的原子方式,指的 ...
- 6.windows线程切换_主动切换
ida 分析KiSwapThread sub esp, 10h mov [esp+10h+var_4], ebx ;保存当前线程寄存器现场 mov [esp+10h+var_8], esi mov [ ...
- 进程线程006 Windows线程切换-线程优先级
文章目录 内容回顾 调度链表 如何高效查找 如果没有就绪线程怎么办 内容回顾 之前我们已经了解过,有三种情况会导致线程切换: 当前线程主动调用API:API函数–>KiSwapThread–&g ...
- 7.Windows线程切换_时钟中断切换
绝大部分系统内核函数都会调用SwapContext函数,来实现线程的切换,那么这种切换是线程主动调用的. 如何中断一个正在执行的程序? 异常 比如缺页,或者INT N指令 中断 比如时钟中断 系统时钟 ...
- 8.Windows线程切换_时间片管理
时钟中断会导致线程进行切换,但并不是说只要有时钟中断就一定会切换线程,时钟中断时,两种情况会导致线程切换: 当前的线程CPU时间片到期 有备用线程(KPCR.PrcbData.NextThread) ...
- 11.Windows线程切换_线程优先级
(1).当前线程主动调用API: API函数->KiSwapThread->KiSwapContext->SwapContexti (2).当前线程时间片到期: KiDispatch ...
最新文章
- POI各Jar包的作用
- python—多线程之守护线程
- Python 操作 MySQL 的5种方式
- 第四代Express框架koa简介
- 2019.01.24【NOIP普及组】模拟赛C组
- Java List<T>去重方法,引用类型集合去重
- ASCII、ANSI、UNICODE及UTF-8编码
- linux代码windows能跑吗,能不能帮忙改一下下面这些代码,原来是在windows系统上运行的,要让它能在linux上终端跑。该如何处理...
- 【工具使用系列】关于 MATLAB 神经网络故障诊断,你需要知道的事
- 金橙子dll使用说明
- 好用的项目工时管理系统有哪些
- 关于ARPG发展之操作和技能之泛泛而谈(转)
- qcom vfe笔记(msm8996平台)
- “包”治百病,BOS丰富的预付费资源包来了
- Tushare不止数字!新文字特色数据 ---(4)
- 马尾综合征是腰椎间盘突出患者的严重并发症
- java overload_Java方法重载Overload原理及使用解析
- 读书笔记:《学会提问》
- 侍魂胧月传说服务器维护中,侍魂胧月传说手游4月8日停机维护更新公告
- 如何承接软件外包项目