请问如何在保护模式下将寄存器EIP的值转换成进程的线性地址?

fnzh 2007-05-07 10:18:16
我在想能不能通过段表来转换呢?
...全文
241 8 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
说明一下,标题中说的指令指针寄存器的值是指调用栈中缓存函数返回地址。我的目的是想得到这个返回地址的虚拟地址。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧