Windows内核基础知识-1-段寄存器
Windows内核基础知识-1-段寄存器
学过汇编的应该都知道段寄存器,在Windows里段寄存器有很多,之前可能只接触了ds数据段,cs 代码段这种,今天这个博客就介绍Windows一些比较常用的段寄存器。
段:Segment,段寄存器肯定是以s结尾的。通过olldydbg软件可以看到这六个常用的段寄存器

| 寄存器 | 描述 |
|---|---|
| ES | expand segment扩展段 |
| CS | code segment代码段 |
| SS | stack segment栈段 |
| DS | data segment数据段 |
| FS | 取teb的时候常用 |
| GS | 暂时不用管 |
段寄存器大小
段寄存器的大小其实是96位,这里能看到的内容只有16位,4个16进制的内容。
比如这里的:
ES 002B 32位 0(FFFFFFFF)
只有002B这16位的内容有值,这16位又被叫做段选择子/段选择符。
段寄存器的作用:
通过段寄存器来访问地址
其实说学了x8086汇编语言的都知道,地址是=段寄存器+偏移地址 来处理的
而在这个od里面可以很清楚的看到:
这个每个段寄存器后面有一个地址,代表着段寄存器的起始地址,es,cs,ss,ds,gs都是从0开始,除了fs。
控制内存读写权限
数据段ds有读写权限,ss也有读写权限,但是cs有读有执行没有写权限。
但是并不是通过段寄存器的名字来控制读写权限,比如:
#include<iostream>
#include<Windows.h>
using namespace std;
int g_int = 0;
int main()
{
__asm
{
mov dx,cs
mov ds,dx
mov eax,1
mov dword ptr ds:[g_int],eax
}
system("pause");
return 0;
} 
很简单的代码,就给代码段赋值,但是通过其他寄存器来中间调用了一下。

可以看到执行到这里的时候就出了问题,
但是如果我们换了别的段寄存器就是可以正常运行:
__asm
{
mov dx,ds
mov ss,dx
mov eax,1
mov dword ptr ss:[g_int],eax
}
说明并不是通过段寄存器的名字来管理内存的读写执行权限的。
而是通过段寄存器的选择子/选择符来决定。也就是通过od可以直接看到的16位内容。
Windows内核基础知识-1-段寄存器的更多相关文章
- Windows内核基础知识-2-段描述符
Windows内核基础知识-2-段描述符 比如: ES 002B 0(FFFFFFFF) 意思就是es段寄存器,段选择子/段选择符 为002B, 起始地址base为0, 限制范围Limit地址最大能寻 ...
- Windows内核基础知识-5-调用门(32-Bit Call Gate)
Windows内核基础知识-5-调用门(32-Bit Call Gate) 调用门有一个关键的作用,就是用来提权.调用门其实就是一个段. 调用门: 这是段描述符的结构体,里面的s字段用来标记是代码段还 ...
- Windows内核基础知识-8-监听进程、线程和模块
Windows内核基础知识-8-监听进程.线程和模块 Windows内核有一种强大的机制,可以在重大事件发送时得到通知,比如这里的进程.线程和模块加载通知. 本次采用链表+自动快速互斥体来实现内核的主 ...
- windows内核基础与异常处理
前两日碰到了用异常处理来做加密的re题目 所以系统学习一下windows内核相关 windows内核基础 权限级别 内核层:R0 零环 核心态工作区域 大多数驱动程序 应用层:R3 用户态工作区域 只 ...
- 第0章Linux环境到内核基础知识
#include<stdio.h> int main(void) { printf("hello world\n"); return 0; } gcc -g -wall ...
- [汇编] 002基础知识-CPU和寄存器
CPU是什么 当然这里的内存不仅仅指电脑上的内存,例如:我的金士顿8G内存,七彩虹1G独显,在这里来说,显卡也是有内存的(寄存器) CPU如何控制其它部件的? 问题:CPU是如何和电脑主机中其它芯片有 ...
- 学习C#基础知识这段时间
似乎穿越的感觉,我又来到了这周的周五,总是在周五,知道了时间的概念,上午会讲课,但是在下午就是一个总结小练习,上午老师给我们讲了委托,在听课时间感觉很简单啊,哪里有难的地方啊,一直在好奇,老师在演示给 ...
- shell基础知识7-字段分隔符与迭代器
什么是内部字段分隔符 内部字段分隔符(Internal Field Separator,IFS)是shell脚本编程中的一个重要概念.在处理 文本数据时,它的作用可不小. 作为分隔符,IFS有其特殊用 ...
- Windows内核原理-同步IO与异步IO
目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导 ...
随机推荐
- redis学习笔记(一)——windows下redis的安装与配置
前言 很久没有写东西了(.......我的水平就是记个笔记),北漂实习的我,每天晚上回来都不想动,但是做为社会主义接班人的我,还是要时刻给自己充充电,趁着年轻,趁着日渐脱发的脑袋还没有成为" ...
- SwaggerHub 更快,标准化的API设计软件
更快,标准化的API设计 在功能强大且直观的编辑器中设计API,该编辑器旨在提高速度和效率,而不会损失设计一致性. SwaggerHub帮助我们简化了设计和实现API的方式-作为一名架构师,我喜欢良好 ...
- android开发相关知识笔记
1.xpage页面打开: openPage(TestFragment.class) openPage("标识") // 页面打开等待结果返回: openPageForResult( ...
- 支持 Homebrew 安装和编辑器模式的 flomo 命令行工具
什么是 flomo-cli 这是一款可以在命令行中将笔记和想法保存到 flomo 的工具. 基于 Golang 实现,可通过 Homebrew 便捷安装. GitHub Repo:https://gi ...
- C控制台程序 GUI程序
控制台程序对应的工程类型为"Win32控制台程序(Win32 Console Application)",GUI 程序对应的工程类型为"Win32程序(Win32 App ...
- 给App加上音频编辑功能,让你的用户Show起来
如今短视频当道,BGM无处不在,用户在每个能秀的地方都想要加上个性表达的音频.作为一个开发者,需不断探索和迎合用户的行为喜好,音频编辑功能成为用户在编辑个人信息.内容创作.生活分享等场景下的必需品. ...
- LeetCode 982. Triples with Bitwise AND Equal To Zero
题目链接:https://leetcode.com/problems/triples-with-bitwise-and-equal-to-zero/ 题意,已知数组A,长度不超过1000,最大的数不超 ...
- 在Ubuntu20中安装Elasticsearch和Kibana6.8.1版本 母胎教学
首先,我们在Ubuntu中安装Elasticsearch6.8.1命令如下: $ docker pull elasticsearch:6.8.1 拉取完成后,创建Elasticsearch6.8.1容 ...
- 微信小程序云开发-添加数据
一.数据的添加 使用add方法添加数据 添加完成后,在数据库中查询,可以看到数据库中添加了1条数据,此时添加的数据系统自动添加了_openid 将[添加]功能写到对应的方法中 wxml页面中,点击[添 ...
- Lesson2 Thirteen equals one
Lesson2 Thirteen equals one equal ['i:kwəl] v. 等于 He equaled the world record. Nobody equals him i ...