免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: li574000
打印 上一主题 下一主题

c++指针是逻辑地址还是线性地址? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-02-24 20:07 |只看该作者
logic

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
12 [报告]
发表于 2010-02-24 20:13 |只看该作者
在段基址为0的情况下,局部变量的地址在编译的时候就确定了

论坛徽章:
0
13 [报告]
发表于 2010-02-25 11:42 |只看该作者
绝对地址是指逻辑地址,是指0x88008800之类的地址,这个地址是在生成EXE的时候确定,因为生成EXE的时候 ...
drangon 发表于 2010-02-24 19:28



    看了下连接方面的文章,大概明白了,链接后EXE中所有的地址都可以认为是基于某个段基址的偏移,编译器编译后的很多指令甚至都不涉及地址,涉及地址的指令很多都优化成基于当前指令的偏移。当EXE被操作系统加载的时候,用到绝对地址(也就是基于那个段基值的偏移地址 )的指令会被加载器重定位。但是问题来了,假设程序在保护模式下执行,操作系统没有打开页映射,此时CS,DS,ES等段的值是作为选择子的,而不是真正的段偏移,不知道这部分在加载器加载代码后是如何初始化CS,DS,ES等段的?

论坛徽章:
0
14 [报告]
发表于 2010-02-25 12:55 |只看该作者
回楼上 如果没有打开分页  线性地址即等于 物理地址  不过这种情况没遇见过   。

论坛徽章:
0
15 [报告]
发表于 2010-02-25 13:04 |只看该作者
楼上说的我清楚,我就是想知道那个选择子是操作系统如何填充的,不可能是程序自己去填充选择子和LDT描述符这些东西,当操作系统把程序加载到内存后,为了让应用程序能够正确执行,应该还有好多细节要做,这里我们要谈的细节只说地址相关的

论坛徽章:
0
16 [报告]
发表于 2010-02-25 13:08 |只看该作者
如果有人能从一条C语言的代码从编译到连接,再到加载进某个操作系统,再到基于CPU的执行 整个说清楚就好了,发现总是被一些细节卡死,总是处于似懂非懂的状态,郁闷哪

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
17 [报告]
发表于 2010-02-26 09:25 |只看该作者
抓一本操作系统,里面都讲的很明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP