免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2173 | 回复: 2

linux用户态堆栈的寻址问题 [复制链接]

论坛徽章:
0
发表于 2007-08-18 13:02 |显示全部楼层
请问用户态堆栈中局部变量的逻辑地址是怎样通过inter的分段机制映射成线形地址的?小弟研究了好久不得其解,请大侠们指教.

论坛徽章:
0
发表于 2007-08-18 14:03 |显示全部楼层
这个方面是很容易理解的。Intel 手册 AMD 手册都很容易明白。

大概给你讲一下:
每个内存地址的引用,形成线性的地址都是 base + offset

实模式下是: ds : offset 直接转换线性地址为:  ds×16 + offset, 如:ffff:000f = fffff

保护模式下复杂一些: 由 ds selector 获得 data segment descriptor。ds.base 被更新为data segment descritpor 的 base address 域。然后 ds.base + offset 即得线性地址

64 位模式下为全 flat-memory 模式,ds,es,ss,cs 段都是无效的。base 都是基于 0, 但保留了 fs 与 gs 可以使用段式管理。

论坛徽章:
0
发表于 2007-08-19 15:23 |显示全部楼层
原帖由 kornrock 于 2007-8-18 13:02 发表
请问用户态堆栈中局部变量的逻辑地址是怎样通过inter的分段机制映射成线形地址的?小弟研究了好久不得其解,请大侠们指教.


Linux系统的逻辑地址(确切地说是段偏移量)就等于线性地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP