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? Yubin