| 1638 | _linker_syms.somain = sym.second; |
| 1639 | continue; |
| 1640 | } |
| 1641 | if (KittyUtils::String::startsWith(sym.first, "__dl__ZL11solist_tail") || |
| 1642 | KittyUtils::String::startsWith(sym.first, "__dl__ZL6sonext")) |
| 1643 | { |
| 1644 | _linker_syms.sonext = sym.second; |
| 1645 | continue; |
| 1646 | } |
| 1647 | if (_linker_syms.solist && _linker_syms.somain && _linker_syms.sonext) |
| 1648 | break; |
| 1649 | } |
| 1650 | |
| 1651 | if (!(_linker_syms.solist && _linker_syms.somain && _linker_syms.sonext)) |
| 1652 | { |
| 1653 | return false; |
| 1654 | } |
| 1655 | |
| 1656 | KITTY_LOGD("solist(%zx) | somain(%zx) | sonext(%zx)", solist(), somain(), sonext()); |
| 1657 | |
| 1658 | std::vector<char> solist_buf(KT_SOINFO_BUFFER_SZ, 0); |
| 1659 | _pMem->Read(solist(), solist_buf.data(), KT_SOINFO_BUFFER_SZ); |
| 1660 | |
| 1661 | std::vector<char> si_buf(KT_SOINFO_BUFFER_SZ, 0); |
| 1662 | uintptr_t somain_ptr = somain(); |
| 1663 | _pMem->Read(somain_ptr ? somain_ptr : sonext(), si_buf.data(), KT_SOINFO_BUFFER_SZ); |
| 1664 | |
| 1665 | auto allMaps = KittyMemoryEx::getAllMaps(_pMem->processID()); |
| 1666 | |
| 1667 | ElfScanner si_elf{}; |
| 1668 | for (size_t i = 0; i < si_buf.size(); i += sizeof(uintptr_t)) |
nothing calls this directly
no outgoing calls
no test coverage detected