社区
汇编语言
帖子详情
请问如何在保护模式下将寄存器EIP的值转换成进程的线性地址?
fnzh
2007-05-07 10:18:16
我在想能不能通过段表来转换呢?
...全文
242
8
打赏
收藏
请问如何在保护模式下将寄存器EIP的值转换成进程的线性地址?
我在想能不能通过段表来转换呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fnzh
2007-05-09
打赏
举报
回复
现在有个问题,GDT的地址高于0x80000000,用户模式不能访问。hopy兄你说的在GDT中植入一个CALL GATE这篇文章在哪,我怎么没找到
mymtom
2007-05-09
打赏
举报
回复
顶一下!
大熊猫侯佩
2007-05-08
打赏
举报
回复
通过cs中的选择子在GDT或LDT中找到对应的描述符,然后自然得到其中的基地址。
fnzh
2007-05-08
打赏
举报
回复
我想知道的就是如何根据CS和GDT/LDT得到基地址
mymtom
2007-05-08
打赏
举报
回复
你到底想知道虚拟地址还是线性地址啊!
虚拟地址就是EIP的值
线性地址由CS:EIP计算出来
根据CS到GDT/LDT中查出基地址,再加上虚拟地址EIP的就是线性地址!
大熊猫侯佩
2007-05-08
打赏
举报
回复
可以参考我blog中的在GDT中植入一个CALL GATE类似的方法。
我首先在GDT中寻找一个空白的表项,然后放入一个call gate.按照你的意思
可以很容易的扩展的取得任意表项中的内容,包括base addr。
http://blog.csdn.net/mydo
fnzh
2007-05-08
打赏
举报
回复
楼上的兄弟,能不能写一段汇编语句来呢,理论上我也知道这么做啊
fnzh
2007-05-07
打赏
举报
回复
说明一下,标题中说的指令指针寄存器的值是指调用栈中缓存函数返回地址。我的目的是想得到这个返回地址的虚拟地址。
保护模式
下的段
寄存器
值
转化为
线性
地址
过程
关键字: 段
寄存器
、段选择子、全局描述符表、局部描述符表、段描述符、
线性
地址
;
保护模式
下使用段机制的CS,SS,DS,ESt,FS,GS保存的并不是实模式下的段
地址
,而是一个包含了段选择子和偏移
地址
的组合
值
。CPU在读取内存的时候,需要将段
寄存器
的
值
解析成为段
地址
,才能定位找到相应的段。下面我们一步一步解析这个过程。 知识点: 段
寄存器
值
=段选择子
X86汇编语言:从实模式到
保护模式
(代码+注释)--c10、11(
保护模式
:32位x86处理器编程架构+进入
保护模式
)
在进入实模式之后,段
寄存器
的高速换粗部分保留了原始的内容,但其内容是无效的,同时进入后,流水线中的指令并未清除,原来的指令都是16位的译码规则,进入
保护模式
后需要将其转变为32位的译码模式,因此需要刷新流水线以保证程序运行正常。第21根
地址
线,为了满足原始的8086处理器只有20条
地址
线,导致的仅为问题。控制
保护模式
开关的是控制
寄存器
CR0,CR0的0位为PE位(
保护模式
允许位),CR0是个32位
寄存器
。最初的状态为实模式,因此在GDT中安装描述符必须要将GDT的
线性
地址
转化为逻辑
地址
和偏移
地址
。
x86 cpu 32位,
保护模式
下,
EIP
寄存器
存放的是
线性
地址
还是物理
地址
x86 cpu 32位,
保护模式
下,
EIP
寄存器
存放的是
线性
地址
还是物理
地址
来源: ChinaUnix博客 日期: 2006.07.24 20:41 (共有条评论) 我要评论 前提:x86 cpu 32位
保护模式
下,页式映射已经开启。 一.
地址
映射是为了更灵活有效地使用内存资源。 二. 从编程的
实模式与
保护模式
的
地址
变换(逻辑
地址
、
线性
地址
、物理
地址
)
实模式下的
地址
变换 16位系统中,数据总线为16位,
地址
总线为20位,可寻址1M
地址
空间。由于
寄存器
只有16位,而
地址
总线是20位,如果只使用一个
寄存器
存放
地址
,则寻址范围小于1M。为了充分利用
地址
空间,采用:段基址+段偏移 的方式,对20位的
地址
空间进行寻址。物理
地址
=16CS+IP(或16DS+IP),其中CS存放段基址,IP存放段偏移,便恰好可以对20位
地址
空间进行寻址。 以上就是分段机制,...
IA-32
寄存器
(通用
寄存器
、EFLAGS
寄存器
、指令指针
寄存器
、段
寄存器
)
文章目录一、通用
寄存器
(GPR)二、EFLAGS
寄存器
(标志
寄存器
)三、指令指针
寄存器
(
EIP
)四、段
寄存器
(Segment Register) 通用
寄存器
(General Purpose Registers,32位,8个) 段
寄存器
(Segment Registers,16位,6个) 程序状态与控制
寄存器
(Program Status and Control Register,32位,1个) 指令指针
寄存器
(Instruction Pointer,32位,1个) 一、通用
寄存器
(GPR) IA-32体系结
汇编语言
21,500
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章