windows – 用户和内核之间的线程fs段寄存器切换
发布时间:2020-12-13 21:31:50 所属栏目:Windows 来源:网络整理
导读:fs段寄存器如何指向TEB和KPCR.这些数据结构是保存在线程用户和内核堆栈上的吗?因此,当线程上下文切换从用户到内核发生时,fs段reg包含一个指针,TEB被保存到线程用户堆栈上,然后指向KPCR的内核fs段寄存器被加载回fs段注册?这是fs段寄存器指向TEB和KPCR的方式
fs段寄存器如何指向TEB和KPCR.这些数据结构是保存在线程用户和内核堆栈上的吗?因此,当线程上下文切换从用户到内核发生时,fs段reg包含一个指针,TEB被保存到线程用户堆栈上,然后指向KPCR的内核fs段寄存器被加载回fs段注册?这是fs段寄存器指向TEB和KPCR的方式吗?
FS寄存器在LDT或GDT(本地/全局段描述符表)中具有与其相关联的段基地址. FS几乎是描述符表的索引,它选择表中定义的段之一.
当您通过FS访问内存时(使用指令中的FS段覆盖前缀),您访问的内存的虚拟地址等于指令中的地址加上段基址. 该段基址必须与特定于线程的控制数据结构的位置一致.因此,当使用其特定的控制数据结构创建线程时,将基数设置为指向该数据. 对于同一进程中的不同线程,这些位置是不同的,因为它们都共享内存,不应该跨越彼此的结构.上下文切换只是更新FS以指向不同的段或更新描述符表中的段的基地址,然后重新加载FS,以便CPU观察到更改. 当一个线程从用户模式转换到内核模式时,FS及其指向的内容不受内核POV的限制,我希望内核使用指向内核端特定于线程的数据结构的值重新加载FS.在回来的路上,应该恢复用户模式FS.事实上,事情可能会有点复杂,但这应该会给你一个想法. 在64位模式下,您甚至可以使用SWAPGS指令快速交换GS寄存器的内容,在32位模式下扮演类似于FS的角色. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- wpf – Windows Phone用户控件不会在ListBox中拉伸
- windows-server-2003 – 有没有办法在没有域控制器的情况下
- 使用PowerShell来停止进程,我可以绕过确认吗?
- windows – 正在使用哪些dll?
- windows-phone-7 – Windows Phone 7游戏引擎?
- windows-server-2003 – 通过Windows Server 2003 AD网络部
- Windows DNS:有没有办法根据子网对域进行分区
- Windows 7或Server 2008显示进程的运行时间
- microsoft-graph – 504尝试跟踪用户日历中的更改时的网关超
- .net – 适用于Windows的Amazon EC2值得吗?
推荐文章
站长推荐
- .net – 如何轻松更新interop dll?
- .net – 与Windows兼容的文件系统的文件时间分辨
- Windows代码编辑器编译/解释大多数语言ala CodeR
- Windows API一日一练 75 SystemParametersInfo函
- Windows启动屏幕的标准大小
- 我需要在Windows上的Perl脚本中包含#!/usr/bin/
- windows – 按文件名前缀顺序读取目录中的文件?
- win32上的python:如何获得绝对时间/ CPU周期数
- windows-server-2003 – 学习使用Server 2003(或
- 定期的ServiceBus错误“当使用Azure WebSites时,
热点阅读