Windows核心编程_FS段寄存器

FS段寄存器Windows用来存储一些进程信息的,FS段的首地址是存储这些进程信息的首地址:在内核态FS指向GDT表的:0x30地址, 在用户态FS=0x3B

也就是说当切换到用户态时,操作系统会把进程下正在执行的线程的某些信息写入到0X3B为起始地址的空间里,内核态时候也一样,操作系统也会写入一些关于内核程序的相关信息到0x3B里!

由于进程的不同进程信息也不同,所以当控制权到不同的进程下时操作系统会向0x3B空间下写入不同的数据!

下面为FS寄存器下偏移的相关信息:

00  指向SEH链表指针

04  线程堆栈顶部(地址最小)

08  线程堆栈底部(地址最大)

0c  SubSystemTib

10  FiberData

14  ArbitraryUserPointer

18  FS 段寄存器在内存中的镜像

20  进程PID

24  线程ID

2c  指向线程局部存储的指针

30  PEB结构地址(进程结构/不是PCB进程控制块)

34  上一个错误(LastError)

这里来演示一下用_asm内联汇编来获取FS寄存器指向的地址空间里的内容

获取进程PID:

DWORD _PID;_asm{mov eax, dword ptr fs:[20h]mov [_PID],eax}printf("%d", _PID);getchar();

运行结果:

不信的话,我们使用WindowsAPI:

GetCurrentProcessId来获取自身进程PID试试:
DWORD _PID;_asm{mov eax, dword ptr fs:[20h]mov [_PID],eax}printf("%d,%d", _PID, GetCurrentProcessId());getchar();

运行结果

但是还有一个问题,多核CPU是一个CPU下有多个单核CPU,这些CPU通过内部总线来交互数据的,并且是并行的,当每个线程切换时,windows会将某个线程的信息写入到此寄存器下,但是并行的,每个CPU都会有一个自己的fs段寄存器!

Windows核心编程_FS段寄存器相关推荐

  1. 10.Windows线程切换_FS段寄存器

    FS:[0]寄存器在3环时指向TEB.进入0环后FS:[0]指向KPCR 系统中同时存在很多个线程,这就意味着FS:[0]在3环时指向的TEB要有多个(每个线程一份). 但在实际的使用中我们发现,当我 ...

  2. 用户方式中线程的同步——Windows核心编程学习手札之八

    用户方式中线程的同步 --Windows核心编程学习手札之八 系统中所有线程都必须拥有对各种系统资源的访问权,这些资源包括内存堆栈.串口.文件.窗口和许多其他资源.如果一个线程需要独占对资源的访问权, ...

  3. Windows核心编程_HOOK(续)_APIHOOK

    啰嗦啰嗦: 开始之前还是要啰嗦几句,看到自己博客粉丝增加,访问量也越来越多,感到非常开心,而且好评也是不少,指错也非常感谢,从错误中发现了很多问题,非常感谢,也高兴自己的文章能帮助到其它人. 就比如之 ...

  4. C++Windows核心编程读书笔记(转)

    http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...

  5. [C++]《Windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

  6. 《windows核心编程系列》二谈谈ANSI和Unicode字符集

    第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...

  7. 结束处理程序——Windows核心编程学习手札之二十三

    结束处理程序 --Windows核心编程学习手札之二十三 使用SEH可以只关注程序要完成任务,而运行中发生的错误,系统将会发现并通知.Windows引入SHE是为了便于操作系统的开发,使用SHE所造成 ...

  8. 线程与内核对象的同步——Windows核心编程学习手札之九

    线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...

  9. 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七

    线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...

最新文章

  1. python中a=a+2与a+=2的区别
  2. 3720: Gty的妹子树
  3. 幻灯片中如何让日期和页码自动更新
  4. 已锁定计算机,计算机锁定怎么解除_计算机已锁定如何解除
  5. 解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移
  6. 裁员下老公老婆的对话
  7. Android系统运行库分为,Android系统架构
  8. Linux修改SSH端口号
  9. 手机语言包与国家地区对照表
  10. CentOS7图形界面和命令行界面的切换快捷键
  11. Windows“未安装任何音频输出设备“,扬声器红叉不可用
  12. Windows XP 批處理中For命令用法
  13. Fiddler抓包基础使用
  14. 三相差分编码器转成脉冲信号或集电极开路转换模块
  15. 小程序api(常用)
  16. win10安装keras theano
  17. 什么是TOR 官方文档
  18. windows 消息处理
  19. 13.3断流_更新13.3.1后,用WiFi王者荣耀断流,时不时460.飞在天上的解决办法。
  20. JXLS-----JXLS简介

热门文章

  1. python读取成功_Python如何从文件读取数据()
  2. centos8 yum安装mysql8 流程配置
  3. springmvc07 Json处理
  4. springmvc03 接收请求参数
  5. 2.4gwifi最高下载速度_2.4G+5G双频合一的路由器速度会更快?看完后才知道还好没上当...
  6. ipv4转ipv6 在线工具_TOOLFK在线工具-在线文字转语音/语音合成mp3工具
  7. 安装mysql查看随机密码命令_deepin安装MySQL没有弹出设置root密码怎么进行修改
  8. python pil怎么调用_python3如何使用pil
  9. mysql 局域网_MySQL 局域网授权问题
  10. java record用法_JDBM学习八(Record)