diff --git a/dart/dart.h b/dart/dart.h index 99f09db..ee12f4e 100644 --- a/dart/dart.h +++ b/dart/dart.h @@ -11,6 +11,12 @@ const uint32_t DART_MAGIC = 0xDCDCF5F5; +const char* vmInstructions = "_kDartVmSnapshotInstructions"; +const char* vmData = "_kDartVmSnapshotData"; +const char* isolateInstructions = "_kDartIsolateSnapshotInstructions"; +const char* isolateData = "_kDartIsolateSnapshotData"; +const char* buildId = "_kDartSnapshotBuildId"; + enum SnapshotKind: uint64_t { FULL, FULL_JIT, diff --git a/main.cpp b/main.cpp index 88d9dbd..97add3d 100644 --- a/main.cpp +++ b/main.cpp @@ -6,6 +6,18 @@ #include #include +void dumpElf(const ELFIO::elfio& reader) { + ELFIO::dump::header( std::cout, reader ); + ELFIO::dump::section_headers( std::cout, reader ); + ELFIO::dump::segment_headers( std::cout, reader ); + ELFIO::dump::symbol_tables( std::cout, reader ); + ELFIO::dump::notes( std::cout, reader ); + ELFIO::dump::modinfo( std::cout, reader ); + ELFIO::dump::dynamic_tags( std::cout, reader ); + ELFIO::dump::section_datas( std::cout, reader ); + ELFIO::dump::segment_datas( std::cout, reader ); +} + int main(int argc, char** argv) { std::string elfPath = "/home/selim/Загрузки/libapp.so"; //argv[1]; std::cout << "Analyzing file: " << elfPath << std::endl; @@ -16,30 +28,18 @@ int main(int argc, char** argv) { return 0; } + dumpElf(reader); + const std::byte* data = nullptr; const std::byte* text = nullptr; + for(auto section: reader.sections) { + + } + ELFIO::Elf_Half sec_num = reader.sections.size(); - - ELFIO::dump::header( std::cout, reader ); - ELFIO::dump::section_headers( std::cout, reader ); - ELFIO::dump::segment_headers( std::cout, reader ); - ELFIO::dump::symbol_tables( std::cout, reader ); - ELFIO::dump::notes( std::cout, reader ); - ELFIO::dump::modinfo( std::cout, reader ); - ELFIO::dump::dynamic_tags( std::cout, reader ); - ELFIO::dump::section_datas( std::cout, reader ); - ELFIO::dump::segment_datas( std::cout, reader ); - - std::cout << "Number of sections: " << sec_num << std::endl; for ( int i = 0; i < sec_num; ++i ) { ELFIO::section* psec = reader.sections[i]; - std::cout << " [" << i << "] " - << psec->get_name() - << "\t" - << psec->get_size() - << ", " << psec->get_type() - << std::endl; if(psec->get_name() == ".rodata") { data = reinterpret_cast(psec->get_data());