免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5343 | 回复: 7
打印 上一主题 下一主题

[其它] 关于程序的入口点地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-16 20:40 |只看该作者 |倒序浏览
看了些程序入口点的资料,还是有很多问题不理解。

u-boot的映像文件的入口地址0x0,这个好理解,cpu启动和复位时从0x0地址开始执行,所以把start.S放到u-boot.bin最前面。

但是对于系统应用程序的入口点地址就很不明白。
比如用readelf查看 /usr/bin/nano,可知道它的程序入口地址是 0x804a750
这个  0x804a750 好像是个固定值,它是物理地址吗,或者是虚拟内存地址,如果是,难道每次都要成这个地址进入程序? 这个很难理解。

论坛徽章:
0
2 [报告]
发表于 2010-09-16 22:01 |只看该作者
是虚拟地址
建议看看那本程序员的自我修养,里面讲的很清楚的

论坛徽章:
0
3 [报告]
发表于 2010-09-16 22:16 |只看该作者
从Libc库的__start开始执行

论坛徽章:
0
4 [报告]
发表于 2010-09-16 23:27 |只看该作者
回复 2# oneyoung1988


    谢谢你推荐的书,已经在amazon下单了。
    是虚拟地址,但还是不理解。如果A和B两个程序的入口点地址一样,A在运行,这时候要运行B呢

论坛徽章:
0
5 [报告]
发表于 2010-09-17 10:47 |只看该作者
装载的虚拟地址和实际的物理地址是不一样的
不同的程序,内核会在装载的时候分配不同地址的,然后会产生一个映射
这样在应用程序看来地址都是一样的

论坛徽章:
0
6 [报告]
发表于 2010-09-18 09:24 |只看该作者
是虚拟地址,对于每一个程序而言,它能使用的地址都是4G,而通过映射后转成不同的物理地址

论坛徽章:
0
7 [报告]
发表于 2013-01-16 18:02 |只看该作者
看了下时间是个很老的帖子了,不知道楼主现在还在关注这个问题没,
对于虚拟地址来说,每个进程可以使用相同的入口地址,但我这里查看的结果的,不同的进程,入口地址都不一样
所以很疑惑,在进程的地址空间都是独立的,为什么这个入口地址还要各自不同呢?

论坛徽章:
0
8 [报告]
发表于 2013-01-16 18:33 |只看该作者
我的理解,使用了MMU之后,就不用担心程序之间的地址上的冲突了。一般在链接的时候会给一个起始地址(不同于入口),所有的地址以这个地址开始进入安排。一般是由
链接器进入默认安排的,所以我们看到每一个程序的起始地址是一样的,因为都是链接器默认设置的。

但是入口与起始地址是一不同的,入口是你的程序第一个指令的位置,这个就算你的起始地址是相同的,但是你的编写不同或你的ld script不同,入口地址都是不同的。

但是对于裸机程序,由于没有elf的文件头,所以这种程序的起始地址就是入口地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP