entries in PT_DYNAMIC section refer to the correct address at runtime?

Alan Modra amodra@gmail.com
Thu Sep 14 10:25:00 GMT 2017


On Thu, Sep 14, 2017 at 12:09:51PM +0800, Yubin Ruan wrote:
> Hi,
> 
> I read the ELF spec and note that, a segment designated by a program
> header of type PT_DYNAMIC have several entries, many of which contain
> addresses of other things. For example, an entry of type DT_SYMTAB was
> described (in the ELF) spec to "holds the address of the symbol
> table". I wonder whether this address is true at runtime?
> 
> Normally a program header would have the following structure:
> 
> typedef struct {
>     Elf32_Word  p_type;
>     Elf32_Off   p_offset;
>     Elf32_Addr  p_vaddr;
>     Elf32_Addr  p_paddr;
>     Elf32_Word  p_filesz;
>     Elf32_Word  p_memsz;
>     Elf32_Word  p_flags;
>     Elf32_Word  p_align;
> } Elf32_Phdr;
> 
> The `p_vaddr` hold the virtual address (runtime address) for a shared
> object file and a executable file. But, as stated in the ELF spec,
> `p_vaddr` might not be correct for a shared object (because it is
> required to be PIC). So, if that `p_vaddr` is not correct, will those
> entries in PT_DYNAMIC be correct?

DT_ entries that specify addresses will need to be offset by the base
address.

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Elfutils-devel mailing list