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