MCPcopy Create free account
hub / github.com/MJx0/KittyMemoryEx / dsymbols

Method dsymbols

KittyMemoryEx/KittyScanner.cpp:878–994  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

876 if (!KittyMemoryEx::getAddressMap(_pMem->processID(), _dynamic, maps).readable)
877 break;
878 if (!KittyMemoryEx::getAddressMap(_pMem->processID(), _dynamic + (phdr.p_memsz - 1), maps).readable)
879 break;
880
881 std::vector<KT_ElfW(Dyn)> dyn_buff(phdr.p_memsz / sizeof(KT_ElfW(Dyn)));
882 if (!_pMem->Read(_dynamic, &dyn_buff[0], phdr.p_memsz))
883 {
884 KITTY_LOGD("ElfScanner: Failed to read dynamic for ELF (%p).", (void *)_elfBase);
885 break;
886 }
887
888 for (auto &dyn : dyn_buff)
889 {
890 if (dyn.d_tag == DT_NULL)
891 break;
892
893 switch (dyn.d_tag)
894 {
895 case DT_STRTAB:
896 if (_stringTable == 0)
897 _stringTable = dyn.d_un.d_ptr;
898 break;
899 case DT_SYMTAB:
900 if (_symbolTable == 0)
901 _symbolTable = dyn.d_un.d_ptr;
902 break;
903 case DT_STRSZ:
904 if (_strsz == 0)
905 _strsz = dyn.d_un.d_val;
906 break;
907 case DT_SYMENT:
908 _syment = dyn.d_un.d_val;
909 break;
910 default:
911 break;
912 }
913
914 _dynamics.push_back(dyn);
915 }
916
917 break;
918 }
919 }
920
921 auto fix_table_address = [&](uintptr_t &table_addr) {
922 if (table_addr && table_addr < _loadBias)
923 table_addr += _loadBias;
924
925 if (!KittyMemoryEx::getAddressMap(_pMem->processID(), table_addr, maps).readable)
926 table_addr = 0;
927 };
928
929 fix_table_address(_symbolTable);
930 fix_table_address(_stringTable);
931}
932#endif
933
934std::unordered_map<std::string, uintptr_t> ElfScanner::symbols()
935{

Callers

nothing calls this directly

Calls 6

mmapEntryByDataOffsetFunction · 0.85
openMethod · 0.80
lastStrErrorMethod · 0.80
infoMethod · 0.80
closeMethod · 0.80
fdMethod · 0.80

Tested by

no test coverage detected