| 344 | } |
| 345 | |
| 346 | void ElfParser::calcVirtualLoadAddress() { |
| 347 | // Find a difference between the virtual load address (often zero) and the actual DSO base |
| 348 | const char* pheaders = (const char*)_header + _header->e_phoff; |
| 349 | for (int i = 0; i < _header->e_phnum; i++) { |
| 350 | ElfProgramHeader* pheader = (ElfProgramHeader*)(pheaders + i * _header->e_phentsize); |
| 351 | if (pheader->p_type == PT_LOAD) { |
| 352 | _vaddr_diff = _base - pheader->p_vaddr; |
| 353 | return; |
| 354 | } |
| 355 | } |
| 356 | _vaddr_diff = _base; |
| 357 | } |
| 358 | |
| 359 | void ElfParser::parseDynamicSection() { |
| 360 | ElfProgramHeader* dynamic = findProgramHeader(PT_DYNAMIC); |
no outgoing calls
no test coverage detected