diff --git a/src/GUI/ElfViewer.cpp b/src/GUI/ElfViewer.cpp index 8febaf45..87ccbe5c 100644 --- a/src/GUI/ElfViewer.cpp +++ b/src/GUI/ElfViewer.cpp @@ -11,6 +11,7 @@ void ElfViewer::display(bool enabled) { enum { + SELF_HEADER, ELF_HEADER }; static int selected = -1; @@ -21,7 +22,11 @@ void ElfViewer::display(bool enabled) { if (ImGui::TreeNode("Self")) { - ImGui::TreeNodeEx("Self Header", ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen, "Self Header"); + if (ImGui::TreeNodeEx("Self Header", ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen, "Self Header")) + { + if (ImGui::IsItemClicked()) + selected = SELF_HEADER; + } if (ImGui::TreeNode("Self Segment Header")) { @@ -62,11 +67,10 @@ void ElfViewer::display(bool enabled) ImGui::SameLine(); ImGui::BeginChild("Table View", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())); // Leave room for 1 line below us - if (selected == ELF_HEADER) { - ImGui::Text("hello"); + if (selected == SELF_HEADER) { + ImGui::TextWrapped(elf->SElfHeaderStr().c_str()); } ImGui::EndChild(); - selected = -1; ImGui::End(); } \ No newline at end of file diff --git a/src/Loader/Elf.cpp b/src/Loader/Elf.cpp index 8e383508..f7c6dec7 100644 --- a/src/Loader/Elf.cpp +++ b/src/Loader/Elf.cpp @@ -4,6 +4,7 @@ #include #include #include +#include template <> struct magic_enum::customize::enum_range { @@ -272,23 +273,7 @@ void Elf::DebugDump() { spdlog::set_default_logger(std::make_shared("shadps4 logger", begin(sinks), end(sinks))); auto f = std::make_unique("%v", spdlog::pattern_time_type::local, std::string("")); // disable eol spdlog::set_formatter(std::move(f)); - spdlog::info("SELF header:\n"); - - spdlog::info(" magic ..............: 0x{:X}\n", m_self->magic); - spdlog::info(" version .........: {}\n", m_self->version); - spdlog::info(" mode .........: {:#04x}\n", m_self->mode); - spdlog::info(" endian .........: {}\n", m_self->endian); - spdlog::info(" attributes .........: {:#04x}\n", m_self->attributes); - spdlog::info(" category .........: {:#04x}\n", m_self->category); - spdlog::info(" program_type........: {:#04x}\n", m_self->program_type); - spdlog::info(" padding1 ...........: {:#06x}\n", m_self->padding1); - spdlog::info(" header size ........: {}\n", m_self->header_size); - spdlog::info(" meta size .....: {}\n", m_self->meta_size); - spdlog::info(" file size ..........: {}\n", m_self->file_size); - spdlog::info(" padding2 ...........: {:#010x}\n", m_self->padding2); - spdlog::info(" segment count ......: {}\n", m_self->segment_count); - spdlog::info(" unknown 1A .........: {:#06x}\n", m_self->unknown1A); - spdlog::info(" padding3 ...........: {:#010x}\n", m_self->padding3); + spdlog::info(SElfHeaderStr()); spdlog::info("\n"); spdlog::info("SELF segments:\n"); @@ -429,4 +414,25 @@ void Elf::DebugDump() { for (int i = 0; i < 32; i++) spdlog::info("{:02x}", m_self_id_header->digest[i]); spdlog::info("\n"); } + +} + +std::string Elf::SElfHeaderStr() { + std::string header = fmt::format("======= SELF HEADER =========\n", m_self->magic); + header+= fmt::format("magic ..............: 0x{:X}\n", m_self->magic); + header+= fmt::format("version ............: {}\n", m_self->version); + header+= fmt::format("mode ...............: {:#04x}\n", m_self->mode); + header+= fmt::format("endian .............: {}\n", m_self->endian); + header+= fmt::format("attributes .........: {:#04x}\n", m_self->attributes); + header+= fmt::format("category ...........: {:#04x}\n", m_self->category); + header+= fmt::format("program_type........: {:#04x}\n", m_self->program_type); + header+= fmt::format("padding1 ...........: {:#06x}\n", m_self->padding1); + header+= fmt::format("header size ........: {}\n", m_self->header_size); + header+= fmt::format("meta size ..........: {}\n", m_self->meta_size); + header+= fmt::format("file size ..........: {}\n", m_self->file_size); + header+= fmt::format("padding2 ...........: {:#010x}\n", m_self->padding2); + header+= fmt::format("segment count ......: {}\n", m_self->segment_count); + header+= fmt::format("unknown 1A .........: {:#06x}\n", m_self->unknown1A); + header+= fmt::format("padding3 ...........: {:#010x}\n", m_self->padding3); + return header; } \ No newline at end of file diff --git a/src/Loader/Elf.h b/src/Loader/Elf.h index 94f68692..d757d377 100644 --- a/src/Loader/Elf.h +++ b/src/Loader/Elf.h @@ -295,6 +295,8 @@ public: void DebugDump(); [[nodiscard]] const elf_header* GetElfHeader() const { return m_elf_header; } [[nodiscard]] const elf_program_header* GetProgramHeader() const { return m_elf_phdr; } + + std::string SElfHeaderStr(); private: void Reset();