2017-09-14 18:25 GMT+08:00 Alan Modra <amo...@gmail.com>: > 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.
Will base address be automatically adjusted by the dynamic linker if it tries to loaded it at a different base address than that specified in the `p_vaddr'? Thanks, Yubin