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;
} ![](C:\Users\onexia\AppData\Roaming\Typora\typora-user-images\image-20210824154621770.png)
很简单的代码,就给代码段赋值,但是通过其他寄存器来中间调用了一下。
可以看到执行到这里的时候就出了问题,
但是如果我们换了别的段寄存器就是可以正常运行:
__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 背景 在前段时间检查异常连接导 ...
随机推荐
- 查找----python
class Solution: #顺序查找 def seq_search(self,list,num): for i in(range(len(list))): if list[i] == num: ...
- mongodb,redis,mysql的区别和具体应用场景(转)
一.MySQL 关系型数据库. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺点就 ...
- Android布局方式总结
Android的布局分别是:线性布局LinearLayout.相对布局RelativeLayout.帧布局FrameLayout.网格布局GridLayout.约束布局ConstraintLayout ...
- [zebra源码]分片语句ShardPreparedStatement执行过程
主要过程包括: 分库分表的路由定位 sql语句的 ast 抽象语法树的解析 通过自定义 SQLASTVisitor (MySQLSelectASTVisitor) 遍历sql ast,解析出逻辑表名 ...
- HCNA Routing&Switching之动态路由协议OSPF基础(一)
前文我们了解了基于路径矢量算法的动态路由协议RIP防环以及度量值的修改相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15012895.html:今天我 ...
- python 抓取异常
aa={"a":2,"b":1} for i in range(10): aa["a"]=aa["a"]-i print ...
- python 得到字典的所有键 和值
a={} a={"a":1,"b":2,"c":3,"d":4} print(a) print(a.items()) p ...
- 【翻译】拟合与高斯分布 [Curve fitting and the Gaussian distribution]
参考与前言 英文原版 Original English Version:https://fabiandablander.com/r/Curve-Fitting-Gaussian.html 如何通俗易懂 ...
- python + pytest基本使用方法(拓展库)
一.测试钩子配置文件 import pytest# conftest.py 是pytest特有的本地测试配置文件;# 既可以用来设置项目级别的Fixture,也可用来导入外部插件,还可以指定钩子函数# ...
- python之数据驱动Txt操作
一.新建数据Mail163.txt文本 二.Txt_Mail163.py脚本如下: import unittestfrom selenium import webdriverfrom selenium ...