LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2877|回复: 0

请教一个linkers&loaders中的问题,谢谢

[复制链接]
发表于 2009-1-2 13:58:08 | 显示全部楼层 |阅读模式
在第三章结尾的project中作者给出一个自己的object file format的定义,其中重定位项定义为:
loc seg ref type ...

1 : Loc is the location to be relocated,
2 : seg is the segment within which the location is found,
3 : ref is the segment or symbol number to be relocated there,
4 : type is an architecture-dependent relocation type.

其中 ref 的含义是重定位项引用的符号或者段的编号, 问题是segment和symbol都是从1还是编号的, 这里segment和symbol如何区别?
比如下面一个relocation entry:
loc seg 2 type ...
怎么知道这个"2"引用的是第二个symbol还是第二个segment?

不知道是否我理解有误, 觉得这个ref就是elf spec里面讲的Relocation Entry依赖的symbol table index, 最终Relocation Result是使用这个symbol的值计算出来的(如S+A等等). 在elf中, symbol可能是普通的符号,也可能代表一个section(具有STT_SECTION类型), 这样就与上面的ref定义对应起来, ref可以引用一个普通的symbol, 也可能是一个segment. 但唯一的问题是这里怎么区分ref引用的是Symbol还是segment呢?

在中文版翻译中将ref译为"ref是那里需要重载的段或符号数"似乎并不清晰, 我没能理解这句是什么意思...

还请各位达人解惑.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表