以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 操作系统原理 』  (http://bbs.xml.org.cn/list.asp?boardid=63)
----  关于可执行文件虚拟地址的一个问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=63&rootid=&id=42478)


--  作者:gotomaster
--  发布时间:1/18/2007 9:06:00 PM

--  关于可执行文件虚拟地址的一个问题
可执行程序文件中各种段(代码段 数据段之类的)的虚拟地址是在一个空间编址的,也就是说,他们这些逻辑段并没有各自从0开始编址,在linux系统下这些段的地址空间都经过了同样的段映射(实际上还是映射到原地址)然后再经过页映射得到物理地址

我不是很明白,为什么连接器输出的可执行文件的编址不是各段独立的呢
还请高手给予指点


--  作者:WLY
--  发布时间:2/6/2007 2:05:00 PM

--  
还是让高手做吧。。
--  作者:jbh811
--  发布时间:2/13/2007 6:21:00 PM

--  
没太明白楼主的意思。。。
那unix/linux的elf格式来说吧,目标文件和可执行文件都是elf格式的,只是格式中有些差异而以,目标格式的elf未进行重定向和符号解析。
对于可执行格式的elf来说,在elf头部信息后,会有1个或者多个段头部信息(跟段个数相等,段个数在elf头部包含),每个段头部信息就会包含该段在文件中的偏移,以及长度,还有加在到内存中的地址。加载器会按照相应的信息加载程序的这个段。
可执行文件内,一个段内地址都是以0为基址的,因为加载的时候以段位单位,所以文件内的偏移量和加载后内存中的偏移量是一致的,只是加载后多了个段基址而已。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms