Windows核心编程_FS段寄存器
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段寄存器相关推荐
- 10.Windows线程切换_FS段寄存器
FS:[0]寄存器在3环时指向TEB.进入0环后FS:[0]指向KPCR 系统中同时存在很多个线程,这就意味着FS:[0]在3环时指向的TEB要有多个(每个线程一份). 但在实际的使用中我们发现,当我 ...
- 用户方式中线程的同步——Windows核心编程学习手札之八
用户方式中线程的同步 --Windows核心编程学习手札之八 系统中所有线程都必须拥有对各种系统资源的访问权,这些资源包括内存堆栈.串口.文件.窗口和许多其他资源.如果一个线程需要独占对资源的访问权, ...
- Windows核心编程_HOOK(续)_APIHOOK
啰嗦啰嗦: 开始之前还是要啰嗦几句,看到自己博客粉丝增加,访问量也越来越多,感到非常开心,而且好评也是不少,指错也非常感谢,从错误中发现了很多问题,非常感谢,也高兴自己的文章能帮助到其它人. 就比如之 ...
- C++Windows核心编程读书笔记(转)
http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...
- [C++]《Windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...
- 结束处理程序——Windows核心编程学习手札之二十三
结束处理程序 --Windows核心编程学习手札之二十三 使用SEH可以只关注程序要完成任务,而运行中发生的错误,系统将会发现并通知.Windows引入SHE是为了便于操作系统的开发,使用SHE所造成 ...
- 线程与内核对象的同步——Windows核心编程学习手札之九
线程与内核对象的同步 --Windows核心编程学习手札之九 用户方式下的线程同步机制具有速度快的特点,但有其局限性,对于许多应用程序来说,并不合适.例如,互锁函数家族只能在单值上运行,根本无法使线程 ...
- 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...
最新文章
- python中a=a+2与a+=2的区别
- 3720: Gty的妹子树
- 幻灯片中如何让日期和页码自动更新
- 已锁定计算机,计算机锁定怎么解除_计算机已锁定如何解除
- 解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移
- 裁员下老公老婆的对话
- Android系统运行库分为,Android系统架构
- Linux修改SSH端口号
- 手机语言包与国家地区对照表
- CentOS7图形界面和命令行界面的切换快捷键
- Windows“未安装任何音频输出设备“,扬声器红叉不可用
- Windows XP 批處理中For命令用法
- Fiddler抓包基础使用
- 三相差分编码器转成脉冲信号或集电极开路转换模块
- 小程序api(常用)
- win10安装keras theano
- 什么是TOR 官方文档
- windows 消息处理
- 13.3断流_更新13.3.1后,用WiFi王者荣耀断流,时不时460.飞在天上的解决办法。
- JXLS-----JXLS简介
热门文章
- python读取成功_Python如何从文件读取数据()
- centos8 yum安装mysql8 流程配置
- springmvc07 Json处理
- springmvc03 接收请求参数
- 2.4gwifi最高下载速度_2.4G+5G双频合一的路由器速度会更快?看完后才知道还好没上当...
- ipv4转ipv6 在线工具_TOOLFK在线工具-在线文字转语音/语音合成mp3工具
- 安装mysql查看随机密码命令_deepin安装MySQL没有弹出设置root密码怎么进行修改
- python pil怎么调用_python3如何使用pil
- mysql 局域网_MySQL 局域网授权问题
- java record用法_JDBM学习八(Record)