【发布时间】:2014-03-14 14:59:09
【问题描述】:
我读到 ELF 可执行对象文件不可重定位,并且其 .symtab 中的符号具有绝对地址/“值”,而不是可重定位对象的“相对偏移量”。我的理解正确吗?
如果是,那么绝对地址是如何确定的?由于绝大多数可执行目标文件驻留在 ROM(例如 HDD)中而不是 RAM 中,因此您不需要在执行之前将文件加载到 RAM 中吗?那不是和“搬家”一样吗?
谢谢
【问题讨论】:
标签: executable elf
我读到 ELF 可执行对象文件不可重定位,并且其 .symtab 中的符号具有绝对地址/“值”,而不是可重定位对象的“相对偏移量”。我的理解正确吗?
如果是,那么绝对地址是如何确定的?由于绝大多数可执行目标文件驻留在 ROM(例如 HDD)中而不是 RAM 中,因此您不需要在执行之前将文件加载到 RAM 中吗?那不是和“搬家”一样吗?
谢谢
【问题讨论】:
标签: executable elf
一个非位置无关的可执行文件被链接到一个固定地址被加载(到 RAM)。例如,在 32 位 x86 Linux 上,默认的链接地址是 0x8048000。该地址可以更改为例如-Ttext 链接器参数。
.symtab 部分中的符号值确实是绝对的,并假定二进制文件加载到它链接到加载的地址。
可执行目标文件驻留在 ROM(例如 HDD)而不是 RAM 中,您不需要在执行之前将文件加载到 RAM 中吗?
是的,但这与符号是相对还是绝对无关。
【讨论】: