digraph A { // rankdir=LR node [shape=record, style=rounded, fontname = "Source Sans Pro"] edge [fontname="Source Sans Pro", fontsize=12] auxv [label = "getauxval(AT_PHDR)" shape=ellipse] pbase [label = "program base address"] phdr[label = "{ Elf64_Phdr | p_type | p_vaddr}"] auxv -> phdr:name phdr:ty -> pbase:n [headlabel = "p_type=PT_PHDR", labeldistance=5, labelangle=-80] phdr:va:se -> pbase:w [headlabel = "phdr addr - p_vaddr", labelangle=140, labeldistance=2.5] dyn [label=" Elf64_Dyn |
d_tag | d_val"] strtab [label=" string table| write\\0writev\\0..."] rela [label=" Elf64_Rela | {r_info | symbol table offset(32) | type(32)} | r_offset "] symtab [label=" Elf64_Sym | st_name "] sym [label = "target symbol! | name | offset"] phdr:ty -> dyn:name [label="p_type=PT_DYNAMIC"] phdr:va:sw -> dyn:name dyn:dt -> rela:name [label="d_tag=DT_RELA"] dyn:dt -> strtab:name [label="d_tag=DT_STRTAB"] dyn:dt -> symtab:name:n [label="d_tag=DT_SYMTAB"] rela:u32:sw->symtab:name:ne [headlabel="index", labeldistance=2.5, labelangle=40] strtab:val -> sym:symname [headlabel = "compare with", labeldistance=5.5, labelangle=60] symtab:symname -> strtab:val rela:roffs->sym:symoffs pbase->sym:symoffs [headlabel = "add for\na ptr!", labeldistance=4] }