Please be specific about exactly what you propose. How would the program find its own executable file from which to read .symtab? The reason it uses only .dynsym is that only .dynsym is part of the memory image in a running program. You mentioned sprof, but this is a completely different case. That's a program that reads an ELF file off disk.