├── .clang-tidy ├── .dockerignore ├── .gdbinit ├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yaml │ └── feature_request.yaml ├── PULL_REQUEST_TEMPLATE.md ├── codecov.yml └── workflows │ ├── analysis.yml │ ├── build.yml │ ├── release.yml │ ├── stale_issues.yml │ └── tests.yml ├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── CMakePresets.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── INSTALL.md ├── LICENSE ├── PLUGINS.md ├── README.md ├── SECURITY.md ├── VERSION ├── cmake ├── build_helpers.cmake ├── cmake_uninstall.cmake.in ├── ide_helpers.cmake ├── modules │ ├── FindBacktrace.cmake │ ├── FindCapstone.cmake │ ├── FindCoreClrEmbed.cmake │ ├── FindGLFW.cmake │ ├── FindLZ4.cmake │ ├── FindMagic.cmake │ ├── FindPackageHandleStandardArgs.cmake │ ├── FindPackageMessage.cmake │ ├── FindYara.cmake │ ├── FindZSTD.cmake │ ├── FindmbedTLS.cmake │ ├── ImHexPlugin.cmake │ └── PostprocessBundle.cmake └── sdk │ ├── CMakeLists.txt │ └── template │ ├── CMakeLists.txt │ └── source │ └── example_plugin.cpp ├── dist ├── AppImage │ ├── AppImageBuilder.yml │ └── Dockerfile ├── Arch │ ├── Dockerfile │ └── PKGBUILD ├── DEBIAN │ └── control.in ├── ImHex-9999.ebuild ├── compiling │ ├── docker.md │ ├── linux.md │ ├── macos.md │ └── windows.md ├── gen_release_notes.py ├── get_deps_archlinux.sh ├── get_deps_debian.sh ├── get_deps_fedora.sh ├── get_deps_msys2.sh ├── get_deps_tumbleweed.sh ├── imhex.desktop ├── imhex.mime.xml ├── langtool.py ├── macOS │ ├── 0001-glfw-SW.patch │ ├── Brewfile │ ├── arm64.Dockerfile │ └── arm64.crosscompile.Dockerfile ├── msys2 │ └── PKGBUILD ├── net.werwolv.ImHex.yaml ├── net.werwolv.imhex.metainfo.xml ├── rpm │ └── imhex.spec ├── vcpkg.json └── web │ ├── Dockerfile │ ├── compose.yml │ ├── plugin-bundle.cpp.in │ ├── serve.py │ └── source │ ├── enable-threads.js │ ├── favicon.ico │ ├── icon.svg │ ├── index.html │ ├── manifest.json │ ├── robots.txt │ ├── sitemap.xml │ ├── style.css │ └── wasm-config.js ├── lib ├── libimhex │ ├── CMakeLists.txt │ ├── LICENSE │ ├── include │ │ ├── hex.cppm │ │ ├── hex.hpp │ │ └── hex │ │ │ ├── api │ │ │ ├── achievement_manager.hpp │ │ │ ├── content_registry.hpp │ │ │ ├── event_manager.hpp │ │ │ ├── events │ │ │ │ ├── events_gui.hpp │ │ │ │ ├── events_interaction.hpp │ │ │ │ ├── events_lifecycle.hpp │ │ │ │ ├── events_provider.hpp │ │ │ │ ├── requests_gui.hpp │ │ │ │ ├── requests_interaction.hpp │ │ │ │ ├── requests_lifecycle.hpp │ │ │ │ └── requests_provider.hpp │ │ │ ├── imhex_api.hpp │ │ │ ├── layout_manager.hpp │ │ │ ├── localization_manager.hpp │ │ │ ├── plugin_manager.hpp │ │ │ ├── project_file_manager.hpp │ │ │ ├── shortcut_manager.hpp │ │ │ ├── task_manager.hpp │ │ │ ├── theme_manager.hpp │ │ │ ├── tutorial_manager.hpp │ │ │ └── workspace_manager.hpp │ │ │ ├── api_urls.hpp │ │ │ ├── data_processor │ │ │ ├── attribute.hpp │ │ │ ├── link.hpp │ │ │ └── node.hpp │ │ │ ├── helpers │ │ │ ├── auto_reset.hpp │ │ │ ├── binary_pattern.hpp │ │ │ ├── concepts.hpp │ │ │ ├── crypto.hpp │ │ │ ├── debugging.hpp │ │ │ ├── default_paths.hpp │ │ │ ├── encoding_file.hpp │ │ │ ├── fmt.hpp │ │ │ ├── freetype.hpp │ │ │ ├── fs.hpp │ │ │ ├── http_requests.hpp │ │ │ ├── http_requests_emscripten.hpp │ │ │ ├── http_requests_native.hpp │ │ │ ├── keys.hpp │ │ │ ├── literals.hpp │ │ │ ├── logger.hpp │ │ │ ├── magic.hpp │ │ │ ├── menu_items.hpp │ │ │ ├── opengl.hpp │ │ │ ├── patches.hpp │ │ │ ├── semantic_version.hpp │ │ │ ├── tar.hpp │ │ │ ├── types.hpp │ │ │ ├── udp_server.hpp │ │ │ ├── utils.hpp │ │ │ ├── utils_linux.hpp │ │ │ └── utils_macos.hpp │ │ │ ├── plugin.hpp │ │ │ ├── providers │ │ │ ├── buffered_reader.hpp │ │ │ ├── memory_provider.hpp │ │ │ ├── overlay.hpp │ │ │ ├── provider.hpp │ │ │ ├── provider_data.hpp │ │ │ └── undo_redo │ │ │ │ ├── operations │ │ │ │ ├── operation.hpp │ │ │ │ └── operation_group.hpp │ │ │ │ └── stack.hpp │ │ │ ├── subcommands │ │ │ └── subcommands.hpp │ │ │ ├── test │ │ │ ├── test_provider.hpp │ │ │ └── tests.hpp │ │ │ └── ui │ │ │ ├── banner.hpp │ │ │ ├── imgui_imhex_extensions.h │ │ │ ├── popup.hpp │ │ │ ├── toast.hpp │ │ │ ├── view.hpp │ │ │ └── widgets.hpp │ └── source │ │ ├── api │ │ ├── achievement_manager.cpp │ │ ├── content_registry.cpp │ │ ├── event_manager.cpp │ │ ├── imhex_api.cpp │ │ ├── layout_manager.cpp │ │ ├── localization_manager.cpp │ │ ├── plugin_manager.cpp │ │ ├── project_file_manager.cpp │ │ ├── shortcut_manager.cpp │ │ ├── task_manager.cpp │ │ ├── theme_manager.cpp │ │ ├── tutorial_manager.cpp │ │ └── workspace_manager.cpp │ │ ├── data_processor │ │ ├── attribute.cpp │ │ ├── link.cpp │ │ └── node.cpp │ │ ├── helpers │ │ ├── crypto.cpp │ │ ├── debugging.cpp │ │ ├── default_paths.cpp │ │ ├── encoding_file.cpp │ │ ├── freetype.cpp │ │ ├── fs.cpp │ │ ├── http_requests.cpp │ │ ├── http_requests_emscripten.cpp │ │ ├── http_requests_native.cpp │ │ ├── imgui_hooks.cpp │ │ ├── keys.cpp │ │ ├── logger.cpp │ │ ├── macos_menu.m │ │ ├── magic.cpp │ │ ├── opengl.cpp │ │ ├── patches.cpp │ │ ├── semantic_version.cpp │ │ ├── tar.cpp │ │ ├── udp_server.cpp │ │ ├── utils.cpp │ │ ├── utils_linux.cpp │ │ └── utils_macos.m │ │ ├── providers │ │ ├── memory_provider.cpp │ │ ├── provider.cpp │ │ └── undo │ │ │ └── stack.cpp │ │ ├── subcommands │ │ └── subcommands.cpp │ │ ├── test │ │ └── tests.cpp │ │ └── ui │ │ ├── banner.cpp │ │ ├── imgui_imhex_extensions.cpp │ │ ├── popup.cpp │ │ ├── toast.cpp │ │ └── view.cpp ├── third_party │ ├── boost │ │ ├── CMakeLists.txt │ │ └── regex │ │ │ ├── CMakeLists.txt │ │ │ └── include │ │ │ └── boost │ │ │ ├── cregex.hpp │ │ │ ├── regex.h │ │ │ ├── regex.hpp │ │ │ ├── regex │ │ │ ├── concepts.hpp │ │ │ ├── config.hpp │ │ │ ├── config │ │ │ │ ├── borland.hpp │ │ │ │ └── cwchar.hpp │ │ │ ├── icu.hpp │ │ │ ├── mfc.hpp │ │ │ ├── pattern_except.hpp │ │ │ ├── pending │ │ │ │ ├── object_cache.hpp │ │ │ │ ├── static_mutex.hpp │ │ │ │ └── unicode_iterator.hpp │ │ │ ├── regex_traits.hpp │ │ │ ├── user.hpp │ │ │ ├── v4 │ │ │ │ ├── basic_regex.hpp │ │ │ │ ├── basic_regex_creator.hpp │ │ │ │ ├── basic_regex_parser.hpp │ │ │ │ ├── c_regex_traits.hpp │ │ │ │ ├── char_regex_traits.hpp │ │ │ │ ├── cpp_regex_traits.hpp │ │ │ │ ├── cregex.hpp │ │ │ │ ├── error_type.hpp │ │ │ │ ├── icu.hpp │ │ │ │ ├── indexed_bit_flag.hpp │ │ │ │ ├── iterator_category.hpp │ │ │ │ ├── iterator_traits.hpp │ │ │ │ ├── match_flags.hpp │ │ │ │ ├── match_results.hpp │ │ │ │ ├── mem_block_cache.hpp │ │ │ │ ├── object_cache.hpp │ │ │ │ ├── pattern_except.hpp │ │ │ │ ├── perl_matcher.hpp │ │ │ │ ├── perl_matcher_common.hpp │ │ │ │ ├── perl_matcher_non_recursive.hpp │ │ │ │ ├── perl_matcher_recursive.hpp │ │ │ │ ├── primary_transform.hpp │ │ │ │ ├── protected_call.hpp │ │ │ │ ├── regbase.hpp │ │ │ │ ├── regex.hpp │ │ │ │ ├── regex_format.hpp │ │ │ │ ├── regex_fwd.hpp │ │ │ │ ├── regex_grep.hpp │ │ │ │ ├── regex_iterator.hpp │ │ │ │ ├── regex_match.hpp │ │ │ │ ├── regex_merge.hpp │ │ │ │ ├── regex_raw_buffer.hpp │ │ │ │ ├── regex_replace.hpp │ │ │ │ ├── regex_search.hpp │ │ │ │ ├── regex_split.hpp │ │ │ │ ├── regex_token_iterator.hpp │ │ │ │ ├── regex_traits.hpp │ │ │ │ ├── regex_traits_defaults.hpp │ │ │ │ ├── regex_workaround.hpp │ │ │ │ ├── states.hpp │ │ │ │ ├── sub_match.hpp │ │ │ │ ├── syntax_type.hpp │ │ │ │ ├── u32regex_iterator.hpp │ │ │ │ ├── u32regex_token_iterator.hpp │ │ │ │ ├── unicode_iterator.hpp │ │ │ │ └── w32_regex_traits.hpp │ │ │ └── v5 │ │ │ │ ├── basic_regex.hpp │ │ │ │ ├── basic_regex_creator.hpp │ │ │ │ ├── basic_regex_parser.hpp │ │ │ │ ├── c_regex_traits.hpp │ │ │ │ ├── char_regex_traits.hpp │ │ │ │ ├── cpp_regex_traits.hpp │ │ │ │ ├── cregex.hpp │ │ │ │ ├── error_type.hpp │ │ │ │ ├── icu.hpp │ │ │ │ ├── iterator_category.hpp │ │ │ │ ├── iterator_traits.hpp │ │ │ │ ├── match_flags.hpp │ │ │ │ ├── match_results.hpp │ │ │ │ ├── mem_block_cache.hpp │ │ │ │ ├── object_cache.hpp │ │ │ │ ├── pattern_except.hpp │ │ │ │ ├── perl_matcher.hpp │ │ │ │ ├── perl_matcher_common.hpp │ │ │ │ ├── perl_matcher_non_recursive.hpp │ │ │ │ ├── primary_transform.hpp │ │ │ │ ├── regbase.hpp │ │ │ │ ├── regex.hpp │ │ │ │ ├── regex_format.hpp │ │ │ │ ├── regex_fwd.hpp │ │ │ │ ├── regex_grep.hpp │ │ │ │ ├── regex_iterator.hpp │ │ │ │ ├── regex_match.hpp │ │ │ │ ├── regex_merge.hpp │ │ │ │ ├── regex_raw_buffer.hpp │ │ │ │ ├── regex_replace.hpp │ │ │ │ ├── regex_search.hpp │ │ │ │ ├── regex_split.hpp │ │ │ │ ├── regex_token_iterator.hpp │ │ │ │ ├── regex_traits.hpp │ │ │ │ ├── regex_traits_defaults.hpp │ │ │ │ ├── regex_workaround.hpp │ │ │ │ ├── states.hpp │ │ │ │ ├── sub_match.hpp │ │ │ │ ├── syntax_type.hpp │ │ │ │ ├── u32regex_iterator.hpp │ │ │ │ ├── u32regex_token_iterator.hpp │ │ │ │ ├── unicode_iterator.hpp │ │ │ │ └── w32_regex_traits.hpp │ │ │ └── regex_fwd.hpp │ ├── imgui │ │ ├── CMakeLists.txt │ │ ├── ColorTextEditor │ │ │ ├── CMakeLists.txt │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ ├── include │ │ │ │ └── TextEditor.h │ │ │ └── source │ │ │ │ └── TextEditor.cpp │ │ ├── backend │ │ │ ├── CMakeLists.txt │ │ │ ├── include │ │ │ │ ├── emscripten_browser_clipboard.h │ │ │ │ ├── imgui_impl_glfw.h │ │ │ │ ├── imgui_impl_opengl3.h │ │ │ │ ├── imgui_impl_opengl3_loader.h │ │ │ │ ├── opengl_support.h │ │ │ │ └── stb_image.h │ │ │ └── source │ │ │ │ ├── imgui_impl_glfw.cpp │ │ │ │ └── imgui_impl_opengl3.cpp │ │ ├── cimgui │ │ │ ├── CMakeLists.txt │ │ │ ├── include │ │ │ │ └── cimgui.h │ │ │ └── source │ │ │ │ └── cimgui.cpp │ │ ├── imgui │ │ │ ├── CMakeLists.txt │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ ├── include │ │ │ │ ├── imconfig.h │ │ │ │ ├── imgui.h │ │ │ │ ├── imgui_internal.h │ │ │ │ ├── imstb_rectpack.h │ │ │ │ ├── imstb_textedit.h │ │ │ │ ├── imstb_truetype.h │ │ │ │ └── misc │ │ │ │ │ └── freetype │ │ │ │ │ └── imgui_freetype.h │ │ │ └── source │ │ │ │ ├── imgui.cpp │ │ │ │ ├── imgui_demo.cpp │ │ │ │ ├── imgui_draw.cpp │ │ │ │ ├── imgui_tables.cpp │ │ │ │ ├── imgui_widgets.cpp │ │ │ │ └── misc │ │ │ │ └── freetype │ │ │ │ └── imgui_freetype.cpp │ │ ├── imgui_test_engine │ │ │ ├── CMakeLists.txt │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ ├── include │ │ │ │ ├── imgui_capture_tool.h │ │ │ │ ├── imgui_te_context.h │ │ │ │ ├── imgui_te_coroutine.h │ │ │ │ ├── imgui_te_engine.h │ │ │ │ ├── imgui_te_exporters.h │ │ │ │ ├── imgui_te_imconfig.h │ │ │ │ ├── imgui_te_internal.h │ │ │ │ ├── imgui_te_perftool.h │ │ │ │ ├── imgui_te_ui.h │ │ │ │ ├── imgui_te_utils.h │ │ │ │ └── thirdparty │ │ │ │ │ ├── README.md │ │ │ │ │ ├── Str │ │ │ │ │ ├── .editorconfig │ │ │ │ │ ├── README.md │ │ │ │ │ ├── Str.h │ │ │ │ │ └── Str.natvis │ │ │ │ │ └── stb │ │ │ │ │ └── imstb_image_write.h │ │ │ └── source │ │ │ │ ├── imgui_capture_tool.cpp │ │ │ │ ├── imgui_te_context.cpp │ │ │ │ ├── imgui_te_coroutine.cpp │ │ │ │ ├── imgui_te_engine.cpp │ │ │ │ ├── imgui_te_exporters.cpp │ │ │ │ ├── imgui_te_perftool.cpp │ │ │ │ ├── imgui_te_ui.cpp │ │ │ │ └── imgui_te_utils.cpp │ │ ├── imnodes │ │ │ ├── CMakeLists.txt │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── include │ │ │ │ ├── imnodes.h │ │ │ │ └── imnodes_internal.h │ │ │ └── source │ │ │ │ └── imnodes.cpp │ │ ├── implot │ │ │ ├── CMakeLists.txt │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ ├── include │ │ │ │ ├── implot.h │ │ │ │ └── implot_internal.h │ │ │ └── source │ │ │ │ ├── implot.cpp │ │ │ │ ├── implot_demo.cpp │ │ │ │ └── implot_items.cpp │ │ └── implot3d │ │ │ ├── CMakeLists.txt │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── include │ │ │ ├── implot3d.h │ │ │ └── implot3d_internal.h │ │ │ └── source │ │ │ ├── implot3d.cpp │ │ │ ├── implot3d_demo.cpp │ │ │ ├── implot3d_items.cpp │ │ │ └── implot3d_meshes.cpp │ ├── jthread │ │ ├── CMakeLists.txt │ │ └── includes │ │ │ └── jthread.hpp │ ├── llvm-demangle │ │ ├── CMakeLists.txt │ │ ├── LICENSE.TXT │ │ ├── include │ │ │ └── llvm │ │ │ │ └── Demangle │ │ │ │ ├── Demangle.h │ │ │ │ ├── DemangleConfig.h │ │ │ │ ├── ItaniumDemangle.h │ │ │ │ ├── ItaniumNodes.def │ │ │ │ ├── MicrosoftDemangle.h │ │ │ │ ├── MicrosoftDemangleNodes.h │ │ │ │ ├── README.txt │ │ │ │ ├── StringViewExtras.h │ │ │ │ └── Utility.h │ │ └── source │ │ │ ├── DLangDemangle.cpp │ │ │ ├── Demangle.cpp │ │ │ ├── ItaniumDemangle.cpp │ │ │ ├── MicrosoftDemangle.cpp │ │ │ ├── MicrosoftDemangleNodes.cpp │ │ │ └── RustDemangle.cpp │ ├── microtar │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── README.md │ │ ├── include │ │ │ └── microtar.h │ │ └── source │ │ │ └── microtar.c │ ├── miniaudio │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── include │ │ │ └── miniaudio.h │ │ └── source │ │ │ └── miniaudio.c │ ├── nlohmann_json │ │ ├── CMakeLists.txt │ │ ├── LICENSE.MIT │ │ ├── cmake │ │ │ ├── config.cmake.in │ │ │ ├── nlohmann_jsonConfigVersion.cmake.in │ │ │ └── pkg-config.pc.in │ │ ├── include │ │ │ └── nlohmann │ │ │ │ ├── adl_serializer.hpp │ │ │ │ ├── byte_container_with_subtype.hpp │ │ │ │ ├── detail │ │ │ │ ├── abi_macros.hpp │ │ │ │ ├── conversions │ │ │ │ │ ├── from_json.hpp │ │ │ │ │ ├── to_chars.hpp │ │ │ │ │ └── to_json.hpp │ │ │ │ ├── exceptions.hpp │ │ │ │ ├── hash.hpp │ │ │ │ ├── input │ │ │ │ │ ├── binary_reader.hpp │ │ │ │ │ ├── input_adapters.hpp │ │ │ │ │ ├── json_sax.hpp │ │ │ │ │ ├── lexer.hpp │ │ │ │ │ ├── parser.hpp │ │ │ │ │ └── position_t.hpp │ │ │ │ ├── iterators │ │ │ │ │ ├── internal_iterator.hpp │ │ │ │ │ ├── iter_impl.hpp │ │ │ │ │ ├── iteration_proxy.hpp │ │ │ │ │ ├── iterator_traits.hpp │ │ │ │ │ ├── json_reverse_iterator.hpp │ │ │ │ │ └── primitive_iterator.hpp │ │ │ │ ├── json_custom_base_class.hpp │ │ │ │ ├── json_pointer.hpp │ │ │ │ ├── json_ref.hpp │ │ │ │ ├── macro_scope.hpp │ │ │ │ ├── macro_unscope.hpp │ │ │ │ ├── meta │ │ │ │ │ ├── call_std │ │ │ │ │ │ ├── begin.hpp │ │ │ │ │ │ └── end.hpp │ │ │ │ │ ├── cpp_future.hpp │ │ │ │ │ ├── detected.hpp │ │ │ │ │ ├── identity_tag.hpp │ │ │ │ │ ├── is_sax.hpp │ │ │ │ │ ├── std_fs.hpp │ │ │ │ │ ├── type_traits.hpp │ │ │ │ │ └── void_t.hpp │ │ │ │ ├── output │ │ │ │ │ ├── binary_writer.hpp │ │ │ │ │ ├── output_adapters.hpp │ │ │ │ │ └── serializer.hpp │ │ │ │ ├── string_concat.hpp │ │ │ │ ├── string_escape.hpp │ │ │ │ ├── string_utils.hpp │ │ │ │ └── value_t.hpp │ │ │ │ ├── json.hpp │ │ │ │ ├── json_fwd.hpp │ │ │ │ ├── ordered_map.hpp │ │ │ │ └── thirdparty │ │ │ │ └── hedley │ │ │ │ ├── hedley.hpp │ │ │ │ └── hedley_undef.hpp │ │ ├── nlohmann_json.natvis │ │ └── single_include │ │ │ └── nlohmann │ │ │ ├── json.hpp │ │ │ └── json_fwd.hpp │ └── yara │ │ ├── CMakeLists.txt │ │ └── crypto.h └── trace │ ├── CMakeLists.txt │ ├── include │ └── hex │ │ └── trace │ │ ├── exceptions.hpp │ │ └── stacktrace.hpp │ └── source │ ├── exceptions.cpp │ ├── instr_entry.cpp │ └── stacktrace.cpp ├── main ├── CMakeLists.txt ├── forwarder │ ├── CMakeLists.txt │ └── source │ │ └── main.cpp ├── gui │ ├── CMakeLists.txt │ ├── include │ │ ├── crash_handlers.hpp │ │ ├── init │ │ │ ├── run.hpp │ │ │ ├── splash_window.hpp │ │ │ └── tasks.hpp │ │ ├── messaging.hpp │ │ └── window.hpp │ ├── romfs │ │ ├── splash_background.svg │ │ ├── splash_colors.json │ │ └── splash_text.svg │ └── source │ │ ├── crash_handlers.cpp │ │ ├── init │ │ ├── run │ │ │ ├── cli.cpp │ │ │ ├── common.cpp │ │ │ ├── native.cpp │ │ │ └── web.cpp │ │ ├── splash_window.cpp │ │ └── tasks.cpp │ │ ├── main.cpp │ │ ├── messaging │ │ ├── common.cpp │ │ ├── linux.cpp │ │ ├── macos.cpp │ │ ├── web.cpp │ │ └── win.cpp │ │ └── window │ │ ├── linux_window.cpp │ │ ├── macos_window.cpp │ │ ├── web_window.cpp │ │ ├── win_window.cpp │ │ └── window.cpp ├── romfs │ └── splash_text.svg └── updater │ ├── CMakeLists.txt │ └── source │ └── main.cpp ├── plugins ├── builtin │ ├── CMakeLists.txt │ ├── include │ │ └── content │ │ │ ├── command_line_interface.hpp │ │ │ ├── data_processor_nodes.hpp │ │ │ ├── export_formatters │ │ │ ├── export_formatter.hpp │ │ │ ├── export_formatter_csv.hpp │ │ │ ├── export_formatter_json.hpp │ │ │ └── export_formatter_tsv.hpp │ │ │ ├── global_actions.hpp │ │ │ ├── helpers │ │ │ ├── demangle.hpp │ │ │ └── diagrams.hpp │ │ │ ├── popups │ │ │ ├── hex_editor │ │ │ │ └── popup_hex_editor_find.hpp │ │ │ ├── popup_blocking_task.hpp │ │ │ ├── popup_crash_recovered.hpp │ │ │ ├── popup_docs_question.hpp │ │ │ ├── popup_tasks_waiting.hpp │ │ │ └── popup_unsaved_changes.hpp │ │ │ ├── providers │ │ │ ├── base64_provider.hpp │ │ │ ├── disk_provider.hpp │ │ │ ├── file_provider.hpp │ │ │ ├── gdb_provider.hpp │ │ │ ├── intel_hex_provider.hpp │ │ │ ├── memory_file_provider.hpp │ │ │ ├── motorola_srec_provider.hpp │ │ │ ├── null_provider.hpp │ │ │ ├── process_memory_provider.hpp │ │ │ ├── udp_provider.hpp │ │ │ ├── undo_operations │ │ │ │ ├── operation_bookmark.hpp │ │ │ │ ├── operation_insert.hpp │ │ │ │ ├── operation_remove.hpp │ │ │ │ └── operation_write.hpp │ │ │ └── view_provider.hpp │ │ │ ├── recent.hpp │ │ │ ├── tools_entries.hpp │ │ │ └── views │ │ │ ├── view_about.hpp │ │ │ ├── view_achievements.hpp │ │ │ ├── view_bookmarks.hpp │ │ │ ├── view_command_palette.hpp │ │ │ ├── view_constants.hpp │ │ │ ├── view_data_inspector.hpp │ │ │ ├── view_data_processor.hpp │ │ │ ├── view_find.hpp │ │ │ ├── view_hex_editor.hpp │ │ │ ├── view_highlight_rules.hpp │ │ │ ├── view_information.hpp │ │ │ ├── view_logs.hpp │ │ │ ├── view_patches.hpp │ │ │ ├── view_pattern_data.hpp │ │ │ ├── view_pattern_editor.hpp │ │ │ ├── view_provider_settings.hpp │ │ │ ├── view_settings.hpp │ │ │ ├── view_store.hpp │ │ │ ├── view_theme_manager.hpp │ │ │ ├── view_tools.hpp │ │ │ └── view_tutorials.hpp │ ├── romfs │ │ ├── assets │ │ │ ├── achievements │ │ │ │ ├── abacus.png │ │ │ │ ├── adhesive-bandage.png │ │ │ │ ├── black-question-mark-ornament.png │ │ │ │ ├── bookmark-tabs.png │ │ │ │ ├── bookmark.png │ │ │ │ ├── brain.png │ │ │ │ ├── briefcase.png │ │ │ │ ├── card-index-dividers.png │ │ │ │ ├── clipboard.png │ │ │ │ ├── cloud.png │ │ │ │ ├── collision-symbol.png │ │ │ │ ├── copy.png │ │ │ │ ├── eye-in-speech-bubble.png │ │ │ │ ├── frame-with-picture.png │ │ │ │ ├── hammer-and-pick.png │ │ │ │ ├── hammer-and-wrench.png │ │ │ │ ├── hammer.png │ │ │ │ ├── hourglass.png │ │ │ │ ├── linked-paperclips.png │ │ │ │ ├── open-book.png │ │ │ │ ├── package.png │ │ │ │ ├── page-facing-up.png │ │ │ │ ├── pencil.png │ │ │ │ ├── right-pointing-magnifying-glass.png │ │ │ │ ├── ring.png │ │ │ │ ├── water-wave.png │ │ │ │ └── wrench.png │ │ │ ├── common │ │ │ │ ├── color_names.json │ │ │ │ ├── compass.png │ │ │ │ ├── donation │ │ │ │ │ ├── github.png │ │ │ │ │ ├── patreon.png │ │ │ │ │ └── paypal.png │ │ │ │ ├── globe.png │ │ │ │ ├── icon.png │ │ │ │ ├── logo.svg │ │ │ │ └── nightly.svg │ │ │ ├── dark │ │ │ │ ├── backdrop.png │ │ │ │ └── banner.svg │ │ │ ├── light │ │ │ │ ├── backdrop.png │ │ │ │ └── banner.svg │ │ │ ├── screenshot_descriptions.json │ │ │ └── screenshots │ │ │ │ ├── 3d_visualizer.png │ │ │ │ ├── bookmarks.png │ │ │ │ ├── data_analysis.png │ │ │ │ ├── data_processor.png │ │ │ │ ├── diffing.png │ │ │ │ ├── floating_windows.png │ │ │ │ ├── patterns.png │ │ │ │ ├── simplified_mode.png │ │ │ │ ├── tools.png │ │ │ │ └── welcome_screen.png │ │ ├── auto_extract │ │ │ └── workspaces │ │ │ │ ├── default.hexws │ │ │ │ └── minimal.hexws │ │ ├── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ │ ├── layouts │ │ │ ├── default.hexlyt │ │ │ └── minimal.hexlyt │ │ ├── licenses │ │ │ └── LICENSE │ │ ├── logo.ans │ │ ├── themes │ │ │ ├── classic.json │ │ │ ├── dark.json │ │ │ └── light.json │ │ └── tips.json │ ├── source │ │ ├── content │ │ │ ├── achievements.cpp │ │ │ ├── background_services.cpp │ │ │ ├── command_line_interface.cpp │ │ │ ├── command_palette_commands.cpp │ │ │ ├── communication_interface.cpp │ │ │ ├── data_formatters.cpp │ │ │ ├── data_information_sections.cpp │ │ │ ├── data_inspector.cpp │ │ │ ├── data_processor_nodes.cpp │ │ │ ├── data_processor_nodes │ │ │ │ ├── basic_nodes.cpp │ │ │ │ ├── control_nodes.cpp │ │ │ │ ├── decode_nodes.cpp │ │ │ │ ├── logic_nodes.cpp │ │ │ │ ├── math_nodes.cpp │ │ │ │ ├── other_nodes.cpp │ │ │ │ └── visual_nodes.cpp │ │ │ ├── data_visualizers.cpp │ │ │ ├── events.cpp │ │ │ ├── file_extraction.cpp │ │ │ ├── file_handlers.cpp │ │ │ ├── global_actions.cpp │ │ │ ├── helpers │ │ │ │ └── demangle.cpp │ │ │ ├── init_tasks.cpp │ │ │ ├── main_menu_items.cpp │ │ │ ├── minimap_visualizers.cpp │ │ │ ├── out_of_box_experience.cpp │ │ │ ├── pl_builtin_functions.cpp │ │ │ ├── pl_builtin_types.cpp │ │ │ ├── pl_pragmas.cpp │ │ │ ├── pl_visualizers.cpp │ │ │ ├── pl_visualizers │ │ │ │ ├── chunk_entropy.cpp │ │ │ │ └── hex_viewer.cpp │ │ │ ├── popups │ │ │ │ └── hex_editor │ │ │ │ │ └── popup_hex_editor_find.cpp │ │ │ ├── project.cpp │ │ │ ├── providers.cpp │ │ │ ├── providers │ │ │ │ ├── base64_provider.cpp │ │ │ │ ├── disk_provider.cpp │ │ │ │ ├── file_provider.cpp │ │ │ │ ├── gdb_provider.cpp │ │ │ │ ├── intel_hex_provider.cpp │ │ │ │ ├── memory_file_provider.cpp │ │ │ │ ├── motorola_srec_provider.cpp │ │ │ │ ├── process_memory_provider.cpp │ │ │ │ ├── udp_provider.cpp │ │ │ │ └── view_provider.cpp │ │ │ ├── recent.cpp │ │ │ ├── report_generators.cpp │ │ │ ├── settings_entries.cpp │ │ │ ├── themes.cpp │ │ │ ├── tools │ │ │ │ ├── ascii_table.cpp │ │ │ │ ├── base_converter.cpp │ │ │ │ ├── byte_swapper.cpp │ │ │ │ ├── color_picker.cpp │ │ │ │ ├── demangler.cpp │ │ │ │ ├── euclidean_alg.cpp │ │ │ │ ├── file_tool_combiner.cpp │ │ │ │ ├── file_tool_shredder.cpp │ │ │ │ ├── file_tool_splitter.cpp │ │ │ │ ├── file_uploader.cpp │ │ │ │ ├── graphing_calc.cpp │ │ │ │ ├── http_requests.cpp │ │ │ │ ├── ieee_decoder.cpp │ │ │ │ ├── math_eval.cpp │ │ │ │ ├── multiplication_decoder.cpp │ │ │ │ ├── perms_calc.cpp │ │ │ │ ├── regex_replacer.cpp │ │ │ │ ├── tcp_client_server.cpp │ │ │ │ └── wiki_explainer.cpp │ │ │ ├── tools_entries.cpp │ │ │ ├── tutorials │ │ │ │ ├── introduction.cpp │ │ │ │ └── tutorials.cpp │ │ │ ├── ui_items.cpp │ │ │ ├── views.cpp │ │ │ ├── views │ │ │ │ ├── view_about.cpp │ │ │ │ ├── view_achievements.cpp │ │ │ │ ├── view_bookmarks.cpp │ │ │ │ ├── view_command_palette.cpp │ │ │ │ ├── view_constants.cpp │ │ │ │ ├── view_data_inspector.cpp │ │ │ │ ├── view_data_processor.cpp │ │ │ │ ├── view_find.cpp │ │ │ │ ├── view_hex_editor.cpp │ │ │ │ ├── view_highlight_rules.cpp │ │ │ │ ├── view_information.cpp │ │ │ │ ├── view_logs.cpp │ │ │ │ ├── view_patches.cpp │ │ │ │ ├── view_pattern_data.cpp │ │ │ │ ├── view_pattern_editor.cpp │ │ │ │ ├── view_provider_settings.cpp │ │ │ │ ├── view_settings.cpp │ │ │ │ ├── view_store.cpp │ │ │ │ ├── view_theme_manager.cpp │ │ │ │ ├── view_tools.cpp │ │ │ │ └── view_tutorials.cpp │ │ │ ├── welcome_screen.cpp │ │ │ ├── window_decoration.cpp │ │ │ └── workspaces.cpp │ │ └── plugin_builtin.cpp │ └── tests │ │ ├── CMakeLists.txt │ │ └── source │ │ └── main.cpp ├── decompress │ ├── CMakeLists.txt │ └── source │ │ ├── content │ │ └── pl_functions.cpp │ │ └── plugin_decompress.cpp ├── diffing │ ├── CMakeLists.txt │ ├── include │ │ └── content │ │ │ └── views │ │ │ └── view_diff.hpp │ ├── romfs │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ └── source │ │ ├── content │ │ ├── diffing_algorithms.cpp │ │ └── views │ │ │ └── view_diff.cpp │ │ └── plugin_diffing.cpp ├── disassembler │ ├── CMakeLists.txt │ ├── include │ │ └── content │ │ │ ├── helpers │ │ │ └── disassembler.hpp │ │ │ └── views │ │ │ └── view_disassembler.hpp │ ├── romfs │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ └── source │ │ ├── content │ │ ├── disassemblers │ │ │ ├── capstone_architectures.cpp │ │ │ └── custom_architectures.cpp │ │ ├── pl_builtin_types.cpp │ │ ├── pl_visualizers │ │ │ └── disassembler.cpp │ │ └── views │ │ │ └── view_disassembler.cpp │ │ └── plugin_disassembler.cpp ├── fonts │ ├── CMakeLists.txt │ ├── LICENSE │ ├── include │ │ ├── font_atlas.hpp │ │ ├── font_settings.hpp │ │ └── fonts │ │ │ ├── blender_icons.hpp │ │ │ ├── fonts.hpp │ │ │ └── vscode_icons.hpp │ ├── romfs │ │ ├── BLENDERICONS_LICENSE.txt │ │ ├── JETBRAINS_MONO_LICENSE.txt │ │ ├── UNIFONT_LICENSE.txt │ │ ├── VSCODICONS_LICENSE.txt │ │ ├── fonts │ │ │ ├── JetBrainsMono.ttf │ │ │ ├── blendericons.ttf │ │ │ ├── codicons.ttf │ │ │ └── unifont.otf │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ └── source │ │ ├── font_loader.cpp │ │ ├── font_settings.cpp │ │ ├── fonts.cpp │ │ └── library_fonts.cpp ├── hashes │ ├── CMakeLists.txt │ ├── include │ │ └── content │ │ │ └── views │ │ │ └── view_hashes.hpp │ ├── romfs │ │ ├── assets │ │ │ └── achievements │ │ │ │ └── fortune-cookie.png │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ └── source │ │ ├── content │ │ ├── hashes.cpp │ │ └── views │ │ │ └── view_hashes.cpp │ │ └── plugin_hashes.cpp ├── script_loader │ ├── CMakeLists.txt │ ├── include │ │ └── loaders │ │ │ ├── dotnet │ │ │ └── dotnet_loader.hpp │ │ │ └── loader.hpp │ ├── romfs │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ ├── source │ │ ├── loaders │ │ │ └── dotnet │ │ │ │ └── dotnet_loader.cpp │ │ └── plugin_script_loader.cpp │ ├── support │ │ ├── c │ │ │ ├── CMakeLists.txt │ │ │ ├── include │ │ │ │ └── script_api.hpp │ │ │ └── source │ │ │ │ └── script_api │ │ │ │ └── v1 │ │ │ │ ├── bookmarks.cpp │ │ │ │ ├── logger.cpp │ │ │ │ ├── mem.cpp │ │ │ │ └── ui.cpp │ │ └── dotnet │ │ │ ├── AssemblyLoader │ │ │ ├── .gitignore │ │ │ ├── AssemblyLoader.csproj │ │ │ ├── Program.cs │ │ │ └── Properties │ │ │ │ └── PublishProfiles │ │ │ │ ├── FolderProfile.pubxml │ │ │ │ └── FolderProfile.pubxml.user │ │ │ └── CMakeLists.txt │ └── templates │ │ └── CSharp │ │ ├── .gitignore │ │ ├── ImHexLibrary │ │ ├── Bookmarks.cs │ │ ├── ImHexLibrary.csproj │ │ ├── Library.cs │ │ ├── Logger.cs │ │ ├── Memory.cs │ │ └── UI.cs │ │ ├── ImHexScript.sln │ │ └── ImHexScript │ │ ├── ImHexScript.csproj │ │ └── Program.cs ├── ui │ ├── CMakeLists.txt │ ├── LICENSE │ ├── include │ │ ├── banners │ │ │ ├── banner_button.hpp │ │ │ └── banner_icon.hpp │ │ ├── popups │ │ │ ├── popup_file_chooser.hpp │ │ │ ├── popup_notification.hpp │ │ │ ├── popup_question.hpp │ │ │ └── popup_text_input.hpp │ │ ├── toasts │ │ │ └── toast_notification.hpp │ │ └── ui │ │ │ ├── hex_editor.hpp │ │ │ ├── pattern_drawer.hpp │ │ │ ├── visualizer_drawer.hpp │ │ │ └── widgets.hpp │ ├── romfs │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ └── source │ │ ├── library_ui.cpp │ │ └── ui │ │ ├── hex_editor.cpp │ │ ├── menu_items.cpp │ │ ├── pattern_drawer.cpp │ │ └── visualizer_drawer.cpp ├── visualizers │ ├── CMakeLists.txt │ ├── include │ │ └── content │ │ │ └── visualizer_helpers.hpp │ ├── romfs │ │ ├── assets │ │ │ └── common │ │ │ │ └── map.jpg │ │ ├── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── es_ES.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── it_IT.json │ │ │ ├── ja_JP.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ │ ├── licenses │ │ │ └── MAP_LICENSE │ │ └── shaders │ │ │ └── default │ │ │ ├── fragment.glsl │ │ │ ├── lightFragment.glsl │ │ │ ├── lightVertex.glsl │ │ │ ├── lineFragment.glsl │ │ │ ├── lineVertex.glsl │ │ │ └── vertex.glsl │ └── source │ │ ├── content │ │ ├── pl_inline_visualizers.cpp │ │ ├── pl_visualizers.cpp │ │ └── pl_visualizers │ │ │ ├── 3d_model.cpp │ │ │ ├── coordinates.cpp │ │ │ ├── digital_signal.cpp │ │ │ ├── image.cpp │ │ │ ├── line_plot.cpp │ │ │ ├── scatter_plot.cpp │ │ │ ├── sound.cpp │ │ │ ├── table.cpp │ │ │ └── timestamp.cpp │ │ └── plugin_visualizers.cpp ├── windows │ ├── CMakeLists.txt │ ├── include │ │ └── views │ │ │ └── view_tty_console.hpp │ ├── romfs │ │ └── lang │ │ │ ├── de_DE.json │ │ │ ├── en_US.json │ │ │ ├── fr_FR.json │ │ │ ├── hu_HU.json │ │ │ ├── ko_KR.json │ │ │ ├── pt_BR.json │ │ │ ├── ru_RU.json │ │ │ ├── zh_CN.json │ │ │ └── zh_TW.json │ └── source │ │ ├── content │ │ ├── settings_entries.cpp │ │ └── ui_items.cpp │ │ ├── plugin_windows.cpp │ │ └── views │ │ └── view_tty_console.cpp └── yara_rules │ ├── CMakeLists.txt │ ├── include │ └── content │ │ ├── views │ │ └── view_yara.hpp │ │ └── yara_rule.hpp │ ├── romfs │ └── lang │ │ ├── de_DE.json │ │ ├── en_US.json │ │ ├── es_ES.json │ │ ├── fr_FR.json │ │ ├── hu_HU.json │ │ ├── it_IT.json │ │ ├── ja_JP.json │ │ ├── ko_KR.json │ │ ├── pt_BR.json │ │ ├── ru_RU.json │ │ ├── zh_CN.json │ │ └── zh_TW.json │ └── source │ ├── content │ ├── data_information_sections.cpp │ ├── views │ │ └── view_yara.cpp │ └── yara_rule.cpp │ └── plugin_yara.cpp ├── resources ├── dist │ ├── common │ │ ├── get_nightly_banner.png │ │ ├── get_release_banner.png │ │ ├── logo │ │ │ ├── ImHexLogoSVGBG.svg │ │ │ ├── ImHexLogoSVGBGShadows.svg │ │ │ ├── ImHexLogoSVGFilled.svg │ │ │ └── ImHexLogoSVGFilledLight.svg │ │ ├── read_docs_banner.png │ │ └── try_online_banner.png │ ├── macos │ │ ├── AppIcon.icns │ │ ├── Entitlements.plist │ │ └── Info.plist.in │ └── windows │ │ ├── LICENSE.rtf │ │ ├── icon.ico │ │ ├── imhex.manifest │ │ ├── wix_banner.png │ │ └── wix_dialog.png ├── icon.svg ├── projects │ ├── dmg_background.xcf │ ├── icon.xcf │ ├── imhex_bg.svg │ ├── imhex_logo.afdesign │ ├── logo_text.svg │ ├── logo_text_dark.svg │ ├── logo_text_light.svg │ ├── ms_banner.xcf │ ├── readme_banners.xcf │ ├── splash_screen.svg │ ├── splash_wasm.xcf │ ├── wix_banner.xcf │ └── wix_dialog.xcf └── resource.rc └── tests ├── CMakeLists.txt ├── algorithms ├── CMakeLists.txt └── source │ ├── crypto.cpp │ └── endian.cpp ├── check_langs.py ├── common ├── CMakeLists.txt └── source │ └── main.cpp ├── helpers ├── CMakeLists.txt └── source │ ├── common.cpp │ ├── file.cpp │ ├── net.cpp │ └── utils.cpp └── plugins ├── CMakeLists.txt └── source └── plugins.cpp /.dockerignore: -------------------------------------------------------------------------------- 1 | cmake-build-*/ 2 | build*/ 3 | 4 | local/ 5 | **/Dockerfile 6 | -------------------------------------------------------------------------------- /.gdbinit: -------------------------------------------------------------------------------- 1 | # Skip all std:: and __gnu_debug:: symbols 2 | skip -rfu ^std:: 3 | skip -rfu ^__gnu_debug:: 4 | 5 | # Skip all ImGui:: symbols 6 | skip -rfu ^ImGui:: 7 | 8 | # Trigger breakpoint when execution reaches triggerSafeShutdown() 9 | break triggerSafeShutdown 10 | 11 | # Print backtrace after execution jumped to an invalid address 12 | define fixbt 13 | set $pc = *(void **)$rsp 14 | set $rsp = $rsp + 8 15 | bt 16 | end -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | lib/external/** linguist-vendored 2 | 3 | dist/*.sh eol=lf 4 | dist/**/*Dockerfile eol=lf -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # Sponsor links 2 | 3 | patreon: werwolv 4 | custom: https://werwolv.net/donate 5 | github: WerWolv 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yaml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: Something you'd like to see added to ImHex in the future 3 | title: "[Feature] " 4 | labels: feature request 5 | body: 6 | - type: textarea 7 | attributes: 8 | label: What feature would you like to see? 9 | description: | 10 | Describe in detail what the feature should do and how it should work. 11 | validations: 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: How will this feature be useful to you and others? 16 | description: Describe how everybody will benefit from this feature if it gets added. 17 | validations: 18 | required: true 19 | - type: checkboxes 20 | attributes: 21 | label: Request Type 22 | options: 23 | - label: I can provide a PoC for this feature or am willing to work on it myself and submit a PR 24 | - type: textarea 25 | attributes: 26 | label: Additional context? 27 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 7 | 8 | ### Problem description 9 | 10 | 11 | ### Implementation description 12 | 13 | 14 | ### Screenshots 15 | 16 | 17 | ### Additional things 18 | 19 | -------------------------------------------------------------------------------- /.github/codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | ignore: 3 | - "lib/third_party" # Third party libraries should be ignored 4 | - "lib/external" # Our own libraries should be checked in their own repositories 5 | - "tests" # https://about.codecov.io/blog/should-i-include-test-files-in-code-coverage-calculations/ 6 | -------------------------------------------------------------------------------- /.github/workflows/stale_issues.yml: -------------------------------------------------------------------------------- 1 | name: Close inactive issues 2 | on: 3 | schedule: 4 | - cron: "30 1 * * 0" 5 | workflow_dispatch: 6 | 7 | jobs: 8 | close-issues: 9 | runs-on: ubuntu-24.04 10 | permissions: 11 | issues: write 12 | pull-requests: write 13 | steps: 14 | - uses: actions/stale@v5 15 | with: 16 | operations-per-run: '200' 17 | ascending: true 18 | days-before-issue-stale: 334 19 | days-before-issue-close: 30 20 | stale-issue-label: "stale" 21 | stale-issue-message: | 22 | This issue is marked stale as it has been open for 11 months without activity. 23 | Please try the latest ImHex version. (Avaiable here: https://imhex.download/ for release and https://imhex.download/#nightly for development version) 24 | If the issue persists on the latest version, please make a comment on this issue again 25 | 26 | Without response, this issue will be closed in one month. 27 | close-issue-message: "" 28 | days-before-pr-stale: -1 29 | days-before-pr-close: -1 30 | repo-token: ${{ secrets.GITHUB_TOKEN }} 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | .idea/ 3 | .kdev4/ 4 | 5 | cmake-build-*/ 6 | build*/ 7 | local/ 8 | venv/ 9 | .cache/ 10 | install/ 11 | out/ 12 | 13 | *.mgc 14 | *.kdev4 15 | imgui.ini 16 | .DS_Store 17 | CMakeUserPresets.json 18 | Brewfile.lock.json 19 | 20 | .vs/ 21 | vcpkg.json 22 | -------------------------------------------------------------------------------- /PLUGINS.md: -------------------------------------------------------------------------------- 1 | # Plugins 2 | 3 | ImHex is entirely built around the possibility to easily load plugins (most of it's features are actually implemented as a plugin!). 4 | 5 | To install plugins, simply download the relevant `.hexplug` file and drop it in your `plugins` folder. The location of that folder can be found under `Help -> About -> ImHex Directories`. 6 | 7 | ## Available Plugins 8 | 9 | (If you're developing a Plugin on your own, please feel free to add it to this list) 10 | 11 | ### Official Plugins 12 | - [Extra Hashes Plugin](https://github.com/WerWolv/ImHex-Hashes-Plugin) 13 | - Adds support for a variety of new hashes to the Hashes view including Blake, Adler32, Murmur and Tiger 14 | - [Discord RPC Plugin](https://github.com/WerWolv/ImHex-Plugin-DiscordRPC) 15 | - Adds support for Discord Rich Presence 16 | 17 | ### Third-Party Plugins 18 | - [Pcap Plugin](https://github.com/Professor-plum/ImHex-Plugin-Pcap) 19 | - Adds support for reading packet capture files 20 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Supported is generally only the latest version that can be downloaded from the Release tab. If you have issues, you might get instructed to use the Nightly release version instead. 6 | If you built ImHex yourself and experience issues that are not present in the version built by GitHub, you're on your own. 7 | 8 | ## Reporting a Vulnerability 9 | 10 | Any critical vulnerabilities can be reported through Discord (@werwolv). 11 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 1.38.0.WIP -------------------------------------------------------------------------------- /cmake/cmake_uninstall.cmake.in: -------------------------------------------------------------------------------- 1 | if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") 2 | message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") 3 | endif() 4 | 5 | file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) 6 | string(REGEX REPLACE "\n" ";" files "${files}") 7 | foreach(file ${files}) 8 | message(STATUS "Uninstalling $ENV{DESTDIR}${file}") 9 | if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") 10 | exec_program( 11 | "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" 12 | OUTPUT_VARIABLE rm_out 13 | RETURN_VALUE rm_retval 14 | ) 15 | if(NOT "${rm_retval}" STREQUAL 0) 16 | message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") 17 | endif() 18 | else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") 19 | message(STATUS "File $ENV{DESTDIR}${file} does not exist.") 20 | endif() 21 | endforeach() 22 | -------------------------------------------------------------------------------- /cmake/modules/FindCapstone.cmake: -------------------------------------------------------------------------------- 1 | find_path(CAPSTONE_INCLUDE_DIR capstone.h PATH_SUFFIXES capstone) 2 | find_library(CAPSTONE_LIBRARY NAMES capstone) 3 | 4 | include(FindPackageHandleStandardArgs) 5 | 6 | find_package_handle_standard_args(Capstone DEFAULT_MSG CAPSTONE_LIBRARY CAPSTONE_INCLUDE_DIR) 7 | 8 | mark_as_advanced(CAPSTONE_INCLUDE_DIR CAPSTONE_LIBRARY) -------------------------------------------------------------------------------- /cmake/modules/FindMagic.cmake: -------------------------------------------------------------------------------- 1 | find_path(LIBMAGIC_INCLUDE_DIR magic.h) 2 | 3 | find_library(LIBMAGIC_LIBRARY NAMES magic) 4 | 5 | if (LIBMAGIC_INCLUDE_DIR AND LIBMAGIC_LIBRARY) 6 | set(LIBMAGIC_FOUND TRUE) 7 | endif (LIBMAGIC_INCLUDE_DIR AND LIBMAGIC_LIBRARY) 8 | 9 | find_package_handle_standard_args("libmagic" DEFAULT_MSG 10 | LIBMAGIC_LIBRARY 11 | LIBMAGIC_INCLUDE_DIR 12 | ) 13 | 14 | mark_as_advanced( 15 | LIBMAGIC_INCLUDE_DIR 16 | LIBMAGIC_LIBRARY 17 | LIBMAGIC_FOUND 18 | ) -------------------------------------------------------------------------------- /cmake/modules/FindYara.cmake: -------------------------------------------------------------------------------- 1 | find_library(YARA_LIBRARIES NAMES yara) 2 | find_file(yara.h YARA_INCLUDE_DIRS) 3 | 4 | mark_as_advanced(YARA_LIBRARIES YARA_INCLUDE_DIRS) -------------------------------------------------------------------------------- /cmake/sdk/template/source/example_plugin.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | // Browse through the headers in lib/libimhex/include/hex/api/ to see what you can do with the API. 4 | // Most important ones are and 5 | 6 | // This is the main entry point of your plugin. The code in the body of this construct will be executed 7 | // when ImHex starts up and loads the plugin. 8 | // The strings in the header are used to display information about the plugin in the UI. 9 | IMHEX_PLUGIN_SETUP("Example Plugin", "Author", "Description") { 10 | // Put your init code here 11 | } -------------------------------------------------------------------------------- /dist/Arch/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM archlinux:latest 2 | 3 | LABEL maintainer="hey@werwolv.net WerWolv" 4 | 5 | # Install dependencies 6 | RUN pacman -Syy --needed --noconfirm 7 | RUN pacman -S --needed --noconfirm \ 8 | git \ 9 | cmake \ 10 | base-devel \ 11 | gcc \ 12 | pkg-config \ 13 | glfw-x11 \ 14 | file \ 15 | mbedtls \ 16 | fontconfig \ 17 | freetype2 \ 18 | curl \ 19 | dbus \ 20 | xdg-desktop-portal 21 | 22 | # Clone ImHex 23 | RUN git clone https://github.com/WerWolv/ImHex --recurse-submodules /root/ImHex 24 | 25 | # Build ImHex 26 | RUN mkdir /root/ImHex/build 27 | WORKDIR /root/ImHex/build 28 | RUN cmake .. && make -j 29 | WORKDIR /root/ImHex 30 | -------------------------------------------------------------------------------- /dist/DEBIAN/control.in: -------------------------------------------------------------------------------- 1 | Package: ImHex 2 | Version: ${PROJECT_VERSION} 3 | Section: editors 4 | Priority: optional 5 | Architecture: amd64 6 | License: GNU GPL-2 7 | Depends: libfontconfig1, libglfw3 | libglfw3-wayland, libmagic1, libmbedtls14, libfreetype6, libopengl0, libdbus-1-3, xdg-desktop-portal 8 | Maintainer: WerWolv 9 | Description: ImHex Hex Editor 10 | A Hex Editor for Reverse Engineers, Programmers and 11 | people who value their retinas when working at 3 AM. 12 | 13 | -------------------------------------------------------------------------------- /dist/ImHex-9999.ebuild: -------------------------------------------------------------------------------- 1 | # app-editors/ImHex 2 | # Copyright 2020 Gentoo Authors 3 | # Distributed under the terms of the GNU General Public License v2 4 | 5 | EAPI=7 6 | 7 | DESCRIPTION="A hex editor for reverse engineers, programmers, and eyesight" 8 | HOMEPAGE="https://github.com/WerWolv/ImHex" 9 | SRC_URI="" 10 | EGIT_REPO_URI="https://github.com/WerWolv/ImHex.git" 11 | 12 | inherit git-r3 cmake 13 | 14 | LICENSE="GPL-2" 15 | SLOT="0" 16 | KEYWORDS="~amd64" 17 | IUSE="" 18 | 19 | DEPEND="" 20 | RDEPEND="${DEPEND} 21 | media-libs/glfw 22 | sys-apps/file 23 | net-libs/mbedtls 24 | sys-apps/dbus 25 | sys-apps/xdg-desktop-portal 26 | sys-libs/zlib 27 | app-arch/bzip2 28 | app-arch/lzma 29 | app-arch/zstd 30 | app-arch/lz4 31 | " 32 | BDEPEND="${DEPEND} 33 | dev-cpp/nlohmann_json 34 | " 35 | -------------------------------------------------------------------------------- /dist/compiling/linux.md: -------------------------------------------------------------------------------- 1 | ### Compiling ImHex on Linux 2 | 3 | On Linux, ImHex is built through regular GCC (or optionally Clang). 4 | 5 | 1. Clone the repo using `git clone https://github.com/WerWolv/ImHex --recurse-submodules` 6 | 2. Install the dependencies using one of the `dist/get_deps_*.sh` scripts. Choose the one that matches your distro. 7 | 3. Build ImHex itself using the following commands: 8 | ```sh 9 | cd ImHex 10 | mkdir -p build 11 | cd build 12 | CC=gcc-14 CXX=g++-14 \ 13 | cmake -G "Ninja" \ 14 | -DCMAKE_BUILD_TYPE=Release \ 15 | -DCMAKE_INSTALL_PREFIX="/usr" \ 16 | .. 17 | ninja install 18 | ``` 19 | 20 | All paths follow the XDG Base Directories standard, and can thus be modified 21 | with the environment variables `XDG_CONFIG_HOME`, `XDG_CONFIG_DIRS`, 22 | `XDG_DATA_HOME` and `XDG_DATA_DIRS`. -------------------------------------------------------------------------------- /dist/compiling/macos.md: -------------------------------------------------------------------------------- 1 | ### Compiling ImHex on macOS 2 | 3 | On macOS, ImHex is built through regular GCC and LLVM clang. 4 | 5 | 1. Clone the repo using `git clone https://github.com/WerWolv/ImHex --recurse-submodules` 6 | 2. Install all the dependencies using `brew bundle --no-lock --file dist/macOS/Brewfile` 7 | 3. Build ImHex itself using the following commands: 8 | ```sh 9 | cd ImHex 10 | mkdir -p build 11 | cd build 12 | CC=$(brew --prefix llvm)/bin/clang \ 13 | CXX=$(brew --prefix llvm)/bin/clang++ \ 14 | OBJC=$(brew --prefix llvm)/bin/clang \ 15 | OBJCXX=$(brew --prefix llvm)/bin/clang++ \ 16 | cmake -G "Ninja" \ 17 | -DCMAKE_BUILD_TYPE=Release \ 18 | -DCMAKE_INSTALL_PREFIX="./install" \ 19 | -DIMHEX_GENERATE_PACKAGE=ON \ 20 | .. 21 | ninja install 22 | ``` 23 | -------------------------------------------------------------------------------- /dist/compiling/windows.md: -------------------------------------------------------------------------------- 1 | ### Compiling ImHex on Windows 2 | 3 | On Windows, ImHex is built through [msys2 / mingw](https://www.msys2.org/)'s gcc. 4 | 5 | 1. Download and install msys2 from their [website](https://www.msys2.org/). 6 | 2. Open the `MSYS2 MinGW x64` shell 7 | 3. Clone the repo using `git clone https://github.com/WerWolv/ImHex --recurse-submodules` 8 | 4. Install all the dependencies using `./ImHex/dist/get_deps_msys2.sh` 9 | 5. Build ImHex itself using the following commands: 10 | 11 | ```sh 12 | cd ImHex 13 | mkdir build 14 | cd build 15 | cmake -G "Ninja" \ 16 | -DCMAKE_BUILD_TYPE=Release \ 17 | -DCMAKE_INSTALL_PREFIX="./install" \ 18 | -DIMHEX_USE_DEFAULT_BUILD_SETTINGS=ON \ 19 | .. 20 | ninja install 21 | ``` 22 | 23 | ImHex will look for any extra resources either in various folders directly next to the executable or in `%localappdata%/imhex` 24 | 25 | For low RAM-usage system, you can use `mingw32-make -j N install` instead, to reduce RAM usage at compile time. Where `N` is amount of jobs you are willling to run at once. Roughly ~1 GB of RAM usage per job. 26 | -------------------------------------------------------------------------------- /dist/get_deps_archlinux.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | pacman -S $@ --needed \ 4 | cmake \ 5 | gcc \ 6 | lld \ 7 | glfw \ 8 | fontconfig \ 9 | file \ 10 | mbedtls \ 11 | freetype2 \ 12 | dbus \ 13 | gtk3 \ 14 | curl \ 15 | fmt \ 16 | yara \ 17 | nlohmann-json \ 18 | ninja \ 19 | zlib \ 20 | bzip2 \ 21 | xz \ 22 | zstd \ 23 | lz4 24 | -------------------------------------------------------------------------------- /dist/get_deps_debian.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Install pkgconf (adds minimum dependencies) only if the equivalent pkf-config is not already installed. 4 | if ! which pkg-config 5 | then 6 | PKGCONF="pkgconf" 7 | fi 8 | 9 | apt install -y \ 10 | build-essential \ 11 | gcc-14 \ 12 | g++-14 \ 13 | lld \ 14 | ${PKGCONF:-} \ 15 | cmake \ 16 | ccache \ 17 | libglfw3-dev \ 18 | libglm-dev \ 19 | libmagic-dev \ 20 | libmbedtls-dev \ 21 | libfontconfig-dev \ 22 | libfreetype-dev \ 23 | libdbus-1-dev \ 24 | libcurl4-gnutls-dev \ 25 | libgtk-3-dev \ 26 | ninja-build \ 27 | zlib1g-dev \ 28 | libbz2-dev \ 29 | liblzma-dev \ 30 | libzstd-dev \ 31 | liblz4-dev 32 | -------------------------------------------------------------------------------- /dist/get_deps_fedora.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | dnf install -y \ 4 | cmake \ 5 | dbus-devel \ 6 | file-devel \ 7 | fontconfig-devel \ 8 | freetype-devel \ 9 | libcurl-devel \ 10 | gcc-c++ \ 11 | git \ 12 | mesa-libGL-devel \ 13 | glfw-devel \ 14 | lld \ 15 | mbedtls-devel \ 16 | gtk3-devel \ 17 | libzstd-devel \ 18 | zlib-devel \ 19 | bzip2-devel \ 20 | xz-devel \ 21 | lz4-devel -------------------------------------------------------------------------------- /dist/get_deps_msys2.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | pacman -S --needed --noconfirm pactoys unzip 4 | pacboy -S --needed --noconfirm \ 5 | gcc:p \ 6 | lld:p \ 7 | cmake:p \ 8 | ccache:p \ 9 | glfw:p \ 10 | file:p \ 11 | curl-winssl:p \ 12 | mbedtls:p \ 13 | freetype:p \ 14 | dlfcn:p \ 15 | ninja:p \ 16 | capstone:p \ 17 | zlib:p \ 18 | bzip2:p \ 19 | xz:p \ 20 | zstd:p \ 21 | lz4:p 22 | -------------------------------------------------------------------------------- /dist/get_deps_tumbleweed.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | zypper install \ 4 | cmake \ 5 | ninja \ 6 | gcc14 \ 7 | gcc14-c++ \ 8 | fontconfig-devel \ 9 | freetype2-devel \ 10 | libcurl-devel \ 11 | dbus-1-devel \ 12 | file-devel \ 13 | Mesa-libGL-devel \ 14 | libglfw-devel \ 15 | mbedtls-devel \ 16 | gtk3-devel \ 17 | libzstd-devel \ 18 | zlib-devel \ 19 | bzip3-devel \ 20 | xz-devel \ 21 | lz4-dev 22 | -------------------------------------------------------------------------------- /dist/imhex.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=ImHex 4 | Comment=ImHex Hex Editor 5 | GenericName=Hex Editor 6 | Exec=imhex %U 7 | Icon=imhex 8 | Type=Application 9 | StartupNotify=true 10 | Categories=Development;IDE; 11 | StartupWMClass=imhex 12 | Keywords=static-analysis;reverse-engineering;disassembler;disassembly;hacking;forensics;hex-editor;cybersecurity;security;binary-analysis; 13 | MimeType=application/vnd.imhex.proj; 14 | Actions=NewFile; 15 | 16 | [Desktop Action NewFile] 17 | Exec=imhex --new 18 | Name=Create New File -------------------------------------------------------------------------------- /dist/imhex.mime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ImHex Project 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /dist/macOS/0001-glfw-SW.patch: -------------------------------------------------------------------------------- 1 | From 9c8665af4c2e2ce66555c15c05c72027bfdf0cb6 Mon Sep 17 00:00:00 2001 2 | From: iTrooz 3 | Date: Mon, 29 Aug 2022 17:29:38 +0200 4 | Subject: [PATCH] Use software rendering on MacOS 5 | 6 | --- 7 | src/nsgl_context.m | 2 +- 8 | 1 file changed, 1 insertion(+), 1 deletion(-) 9 | 10 | diff --git a/src/nsgl_context.m b/src/nsgl_context.m 11 | index fc1f7521..e5906575 100644 12 | --- a/src/nsgl_context.m 13 | +++ b/src/nsgl_context.m 14 | @@ -198,7 +198,7 @@ GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window, 15 | NSOpenGLPixelFormatAttribute attribs[40]; 16 | int index = 0; 17 | 18 | - ADD_ATTRIB(NSOpenGLPFAAccelerated); 19 | + ADD_ATTRIB(NSOpenGLPFARendererID);ADD_ATTRIB(kCGLRendererGenericFloatID); 20 | ADD_ATTRIB(NSOpenGLPFAClosestPolicy); 21 | 22 | if (ctxconfig->nsgl.offline) 23 | -- 24 | 2.37.2 25 | 26 | -------------------------------------------------------------------------------- /dist/macOS/Brewfile: -------------------------------------------------------------------------------- 1 | brew "mbedtls" 2 | brew "nlohmann-json" 3 | brew "cmake" 4 | brew "ccache" 5 | brew "freetype2" 6 | brew "libmagic" 7 | brew "pkg-config" 8 | brew "curl" 9 | brew "llvm" 10 | brew "glfw" 11 | brew "ninja" 12 | brew "zlib" 13 | brew "xz" 14 | brew "bzip2" 15 | brew "zstd" -------------------------------------------------------------------------------- /dist/net.werwolv.ImHex.yaml: -------------------------------------------------------------------------------- 1 | app-id: net.werwolv.ImHex 2 | runtime: org.freedesktop.Platform 3 | runtime-version: '20.08' 4 | default-branch: stable 5 | sdk: org.freedesktop.Sdk 6 | command: imhex 7 | 8 | finish-args: 9 | - --share=ipc 10 | - --socket=x11 11 | - --filesystem=host 12 | - --device=all 13 | 14 | modules: 15 | - name: imhex 16 | buildsystem: cmake 17 | config-opts: 18 | - -DCMAKE_BUILD_TYPE=RelWithDebInfo 19 | 20 | sources: 21 | - type: git 22 | url: https://github.com/WerWolv/ImHex.git 23 | -------------------------------------------------------------------------------- /dist/vcpkg.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vcpkg", 3 | "version": "1.0.0", 4 | "builtin-baseline": "7e21420f775f72ae938bdeb5e6068f722088f06a", 5 | "dependencies": [ 6 | "libmagic", 7 | "freetype", 8 | "mbedtls", 9 | "zlib", 10 | "bzip2", 11 | "liblzma", 12 | "zstd", 13 | "glfw3", 14 | "curl" 15 | ] 16 | } -------------------------------------------------------------------------------- /dist/web/compose.yml: -------------------------------------------------------------------------------- 1 | # docker compose -f dist/web/compose.yml up --build 2 | version: '3' 3 | services: 4 | imhex_web: 5 | image: imhex_web:latest 6 | build: 7 | context: ../../ # ImHex folder 8 | dockerfile: ./dist/web/Dockerfile 9 | ports: 10 | - 8080:80 11 | -------------------------------------------------------------------------------- /dist/web/plugin-bundle.cpp.in: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern "C" void forceLinkPlugin_@IMHEX_PLUGIN_NAME@(); 4 | 5 | namespace { 6 | struct StaticLoad { 7 | StaticLoad() { 8 | forceLinkPlugin_@IMHEX_PLUGIN_NAME@(); 9 | } 10 | }; 11 | } 12 | 13 | static StaticLoad staticLoad; 14 | -------------------------------------------------------------------------------- /dist/web/serve.py: -------------------------------------------------------------------------------- 1 | import http.server 2 | import os 3 | 4 | class MyHttpRequestHandler(http.server.SimpleHTTPRequestHandler): 5 | 6 | def end_headers(self): 7 | self.send_header("Cross-Origin-Embedder-Policy", "require-corp") 8 | self.send_header("Cross-Origin-Opener-Policy", "same-origin") 9 | http.server.SimpleHTTPRequestHandler.end_headers(self) 10 | 11 | if __name__ == '__main__': 12 | os.chdir(".") 13 | httpd = http.server.HTTPServer(("localhost", 9090), MyHttpRequestHandler) 14 | print(f"Serving {os.getcwd()} on http://{httpd.server_address[0]}:{httpd.server_address[1]}") 15 | httpd.serve_forever() 16 | -------------------------------------------------------------------------------- /dist/web/source/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/dist/web/source/favicon.ico -------------------------------------------------------------------------------- /dist/web/source/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ImHex", 3 | "description": "🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.", 4 | "background_color": "#0F0F0F", 5 | "theme_color": "#0F0F0F", 6 | "categories": [ 7 | "education", 8 | "productivity", 9 | "utilities" 10 | ], 11 | "icons": [ 12 | { 13 | "src": "icon.svg", 14 | "type": "image/svg", 15 | "sizes": "640x640" 16 | } 17 | ], 18 | "start_url": ".", 19 | "display": "standalone" 20 | } 21 | -------------------------------------------------------------------------------- /dist/web/source/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: https://imhex.werwolv.net/sitemap.xml -------------------------------------------------------------------------------- /lib/libimhex/include/hex.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #if defined(HEX_MODULE_EXPORT) 6 | #define EXPORT_MODULE export 7 | #else 8 | #define EXPORT_MODULE 9 | #endif -------------------------------------------------------------------------------- /lib/libimhex/include/hex/api/events/requests_gui.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | /* GUI requests definitions */ 6 | namespace hex { 7 | 8 | /** 9 | * @brief Requests the opening of a new window. 10 | * 11 | * @param name the window's name 12 | */ 13 | EVENT_DEF(RequestOpenWindow, std::string); 14 | 15 | /** 16 | * @brief Centralized request to update ImHex's main window title 17 | * 18 | * This request can be called to make ImHex refresh its main window title, taking into account a new project 19 | * or file opened/closed. 20 | */ 21 | EVENT_DEF(RequestUpdateWindowTitle); 22 | 23 | /** 24 | * @brief Requests a theme type (light or dark) change 25 | * 26 | * @param themeType either `Light` or `Dark` 27 | */ 28 | EVENT_DEF(RequestChangeTheme, std::string); 29 | 30 | /** 31 | * @brief Requests the opening of a popup 32 | * 33 | * @param name the popup's name 34 | */ 35 | EVENT_DEF(RequestOpenPopup, std::string); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /lib/libimhex/include/hex/api/events/requests_provider.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | /* Provider requests definitions */ 6 | namespace hex { 7 | 8 | /** 9 | * @brief Creates a provider from its unlocalized name, and add it to the provider list 10 | */ 11 | EVENT_DEF(RequestCreateProvider, std::string, bool, bool, hex::prv::Provider **); 12 | 13 | /** 14 | * @brief Move the data from all PerProvider instances from one provider to another 15 | * 16 | * The 'from' provider should not have any per provider data after this, and should be immediately deleted 17 | * 18 | * FIXME: rename with the "Request" prefix to apply standard naming convention. 19 | */ 20 | EVENT_DEF(MovePerProviderData, prv::Provider *, prv::Provider *); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/libimhex/include/hex/api/workspace_manager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | 9 | EXPORT_MODULE namespace hex { 10 | 11 | class WorkspaceManager { 12 | public: 13 | struct Workspace { 14 | std::string layout; 15 | std::fs::path path; 16 | bool builtin; 17 | }; 18 | 19 | static void createWorkspace(const std::string &name, const std::string &layout = ""); 20 | static void switchWorkspace(const std::string &name); 21 | 22 | static void importFromFile(const std::fs::path &path); 23 | static bool exportToFile(std::fs::path path = {}, std::string workspaceName = {}, bool builtin = false); 24 | 25 | static void removeWorkspace(const std::string &name); 26 | 27 | static const std::map& getWorkspaces(); 28 | static const std::map::iterator& getCurrentWorkspace(); 29 | 30 | static void reset(); 31 | static void reload(); 32 | 33 | static void process(); 34 | 35 | private: 36 | WorkspaceManager() = default; 37 | }; 38 | 39 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/api_urls.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | constexpr static auto ImHexApiURL = "https://api.werwolv.net/imhex"; 4 | constexpr static auto GitHubApiURL = "https://api.github.com/repos/WerWolv/ImHex"; 5 | -------------------------------------------------------------------------------- /lib/libimhex/include/hex/data_processor/link.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace hex::dp { 4 | 5 | class Link { 6 | public: 7 | Link(int from, int to); 8 | 9 | [[nodiscard]] int getId() const { return m_id; } 10 | void setId(int id) { m_id = id; } 11 | 12 | [[nodiscard]] int getFromId() const { return m_from; } 13 | [[nodiscard]] int getToId() const { return m_to; } 14 | 15 | static void setIdCounter(int id); 16 | 17 | private: 18 | int m_id; 19 | int m_from, m_to; 20 | 21 | static int s_idCounter; 22 | }; 23 | 24 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/concepts.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex { 9 | 10 | template 11 | struct always_false : std::false_type { }; 12 | 13 | template 14 | concept has_size = sizeof(T) == Size; 15 | 16 | template 17 | class ICloneable { 18 | public: 19 | virtual ~ICloneable() = default; 20 | [[nodiscard]] virtual std::unique_ptr clone() const = 0; 21 | }; 22 | 23 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/fmt.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace hex { 9 | 10 | template 11 | std::string format(std::string_view format, Args... args) { 12 | return fmt::format(fmt::runtime(format), args...); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/fs.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | 11 | EXPORT_MODULE namespace hex::fs { 12 | 13 | enum class DialogMode { 14 | Open, 15 | Save, 16 | Folder 17 | }; 18 | 19 | struct ItemFilter { 20 | // Human-friendly name 21 | std::string name; 22 | // Extensions that constitute this filter 23 | std::string spec; 24 | }; 25 | 26 | void setFileBrowserErrorCallback(const std::function &callback); 27 | bool openFileBrowser(DialogMode mode, const std::vector &validExtensions, const std::function &callback, const std::string &defaultPath = {}, bool multiple = false); 28 | 29 | void openFileExternal(const std::fs::path &filePath); 30 | void openFolderExternal(const std::fs::path &dirPath); 31 | void openFolderWithSelectionExternal(const std::fs::path &selectedFilePath); 32 | 33 | 34 | bool isPathWritable(const std::fs::path &path); 35 | 36 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/literals.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace hex::literals { 4 | 5 | /* Byte literals */ 6 | 7 | constexpr static unsigned long long operator""_Bytes(unsigned long long bytes) noexcept { 8 | return bytes; 9 | } 10 | 11 | constexpr static unsigned long long operator""_KiB(unsigned long long kiB) noexcept { 12 | return operator""_Bytes(kiB * 1024); 13 | } 14 | 15 | constexpr static unsigned long long operator""_MiB(unsigned long long MiB) noexcept { 16 | return operator""_KiB(MiB * 1024); 17 | } 18 | 19 | constexpr static unsigned long long operator""_GiB(unsigned long long GiB) noexcept { 20 | return operator""_MiB(GiB * 1024); 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/menu_items.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | namespace hex::menu { 5 | 6 | void enableNativeMenuBar(bool enabled); 7 | bool isNativeMenuBarUsed(); 8 | 9 | bool beginMainMenuBar(); 10 | void endMainMenuBar(); 11 | 12 | bool beginMenu(const char *label, bool enabled = true); 13 | void endMenu(); 14 | 15 | bool beginMenuEx(const char* label, const char* icon, bool enabled = true); 16 | 17 | bool menuItem(const char *label, const Shortcut &shortcut = Shortcut::None, bool selected = false, bool enabled = true); 18 | bool menuItem(const char *label, const Shortcut &shortcut, bool *selected, bool enabled = true); 19 | 20 | bool menuItemEx(const char *label, const char *icon, const Shortcut &shortcut = Shortcut::None, bool selected = false, bool enabled = true); 21 | bool menuItemEx(const char *label, const char *icon, const Shortcut &shortcut, bool *selected, bool enabled = true); 22 | 23 | void menuSeparator(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/semantic_version.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | EXPORT_MODULE namespace hex { 10 | 11 | class SemanticVersion { 12 | public: 13 | SemanticVersion() = default; 14 | SemanticVersion(std::string version); 15 | SemanticVersion(std::string_view version); 16 | SemanticVersion(const char *version); 17 | 18 | std::strong_ordering operator<=>(const SemanticVersion &) const; 19 | bool operator==(const SemanticVersion &other) const; 20 | 21 | u32 major() const; 22 | u32 minor() const; 23 | u32 patch() const; 24 | bool nightly() const; 25 | const std::string& buildType() const; 26 | 27 | bool isValid() const; 28 | 29 | std::string get(bool withBuildType = true) const; 30 | 31 | private: 32 | std::vector m_parts; 33 | std::string m_buildType; 34 | }; 35 | 36 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/utils_linux.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #if defined(OS_LINUX) 4 | 5 | namespace hex { 6 | void executeCmd(const std::vector &argsVector); 7 | } 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /lib/libimhex/include/hex/helpers/utils_macos.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #if defined(OS_MACOS) 6 | 7 | #if !defined(HEX_MODULE_EXPORT) 8 | struct GLFWwindow; 9 | #endif 10 | 11 | extern "C" { 12 | 13 | void errorMessageMacos(const char *message); 14 | void openWebpageMacos(const char *url); 15 | bool isMacosSystemDarkModeEnabled(); 16 | bool isMacosFullScreenModeEnabled(GLFWwindow *window); 17 | float getBackingScaleFactor(); 18 | 19 | void setupMacosWindowStyle(GLFWwindow *window, bool borderlessWindowMode); 20 | 21 | void enumerateFontsMacos(); 22 | 23 | void macosHandleTitlebarDoubleClickGesture(GLFWwindow *window); 24 | void macosSetWindowMovable(GLFWwindow *window, bool movable); 25 | bool macosIsWindowBeingResizedByUser(GLFWwindow *window); 26 | void macosMarkContentEdited(GLFWwindow *window, bool edited = true); 27 | 28 | void macosGetKey(Keys key, int *output); 29 | 30 | bool macosIsMainInstance(); 31 | void macosSendMessageToMainInstance(const unsigned char *data, size_t size); 32 | void macosInstallEventListener(); 33 | } 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /lib/libimhex/include/hex/providers/buffered_reader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex::prv { 9 | 10 | using namespace hex::literals; 11 | 12 | inline void providerReaderFunction(Provider *provider, void *buffer, u64 address, size_t size) { 13 | provider->read(address, buffer, size); 14 | } 15 | 16 | class ProviderReader : public wolv::io::BufferedReader { 17 | public: 18 | using BufferedReader::BufferedReader; 19 | 20 | explicit ProviderReader(Provider *provider, size_t bufferSize = 0x100000) : BufferedReader(provider, provider->getActualSize(), bufferSize) { 21 | this->setEndAddress(provider->getBaseAddress() + provider->getActualSize() - 1); 22 | this->seek(provider->getBaseAddress()); 23 | } 24 | }; 25 | 26 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/providers/overlay.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::prv { 8 | 9 | class Overlay { 10 | public: 11 | Overlay() = default; 12 | 13 | void setAddress(u64 address) { m_address = address; } 14 | [[nodiscard]] u64 getAddress() const { return m_address; } 15 | 16 | [[nodiscard]] u64 getSize() const { return m_data.size(); } 17 | [[nodiscard]] std::vector &getData() { return m_data; } 18 | 19 | private: 20 | u64 m_address = 0; 21 | std::vector m_data; 22 | }; 23 | 24 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/providers/undo_redo/operations/operation.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex::prv { 9 | class Provider; 10 | } 11 | 12 | namespace hex::prv::undo { 13 | 14 | class Operation : public ICloneable { 15 | public: 16 | virtual ~Operation() = default; 17 | 18 | virtual void undo(Provider *provider) = 0; 19 | virtual void redo(Provider *provider) = 0; 20 | 21 | [[nodiscard]] virtual Region getRegion() const = 0; 22 | 23 | [[nodiscard]] virtual std::string format() const = 0; 24 | [[nodiscard]] virtual std::vector formatContent() const { 25 | return { }; 26 | } 27 | 28 | [[nodiscard]] virtual bool shouldHighlight() const { return true; } 29 | }; 30 | 31 | } -------------------------------------------------------------------------------- /lib/libimhex/include/hex/subcommands/subcommands.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | namespace hex::subcommands { 8 | 9 | /** 10 | * @brief Internal method - takes all the arguments ImHex received from the command line, 11 | * and determine which subcommands to run, with which arguments. 12 | * In some cases, the subcommand or this function directly might exit the program 13 | * (e.g. --help, or when forwarding providers to open to another instance) 14 | * and so this function might not return 15 | */ 16 | void processArguments(const std::vector &args); 17 | 18 | 19 | /** 20 | * @brief Forward the given command to the main instance (might be this instance) 21 | * The callback will be executed after EventImHexStartupFinished 22 | */ 23 | void forwardSubCommand(const std::string &cmdName, const std::vector &args); 24 | 25 | using ForwardCommandHandler = std::function &)>; 26 | 27 | /** 28 | * @brief Register the handler for this specific command name 29 | */ 30 | void registerSubCommand(const std::string &cmdName, const ForwardCommandHandler &handler); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /lib/libimhex/source/data_processor/attribute.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | 4 | namespace hex::dp { 5 | 6 | int Attribute::s_idCounter = 1; 7 | 8 | 9 | Attribute::Attribute(IOType ioType, Type type, UnlocalizedString unlocalizedName) : m_id(s_idCounter++), m_ioType(ioType), m_type(type), m_unlocalizedName(std::move(unlocalizedName)) { 10 | } 11 | 12 | Attribute::~Attribute() { 13 | for (auto &[linkId, attr] : this->getConnectedAttributes()) 14 | attr->removeConnectedAttribute(linkId); 15 | } 16 | 17 | void Attribute::setIdCounter(int id) { 18 | if (id > s_idCounter) 19 | s_idCounter = id; 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /lib/libimhex/source/data_processor/link.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | 4 | namespace hex::dp { 5 | 6 | int Link::s_idCounter = 1; 7 | 8 | Link::Link(int from, int to) : m_id(s_idCounter++), m_from(from), m_to(to) { } 9 | 10 | void Link::setIdCounter(int id) { 11 | if (id > s_idCounter) 12 | s_idCounter = id; 13 | } 14 | } -------------------------------------------------------------------------------- /lib/libimhex/source/helpers/debugging.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex::dbg { 4 | 5 | namespace impl { 6 | 7 | bool &getDebugWindowState() { 8 | static bool state = false; 9 | 10 | return state; 11 | } 12 | 13 | } 14 | 15 | static bool s_debugMode = false; 16 | bool debugModeEnabled() { 17 | return s_debugMode; 18 | } 19 | 20 | void setDebugModeEnabled(bool enabled) { 21 | s_debugMode = enabled; 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /lib/libimhex/source/helpers/imgui_hooks.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #if !defined(IMGUI_TEST_ENGINE) 9 | 10 | void ImGuiTestEngineHook_ItemAdd(ImGuiContext*, ImGuiID id, const ImRect& bb, const ImGuiLastItemData*) { 11 | std::array boundingBox = { bb.Min.x, bb.Min.y, bb.Max.x, bb.Max.y }; 12 | hex::EventImGuiElementRendered::post(id, boundingBox); 13 | } 14 | 15 | void ImGuiTestEngineHook_ItemInfo(ImGuiContext*, ImGuiID, const char*, ImGuiItemStatusFlags) {} 16 | void ImGuiTestEngineHook_Log(ImGuiContext*, const char*, ...) {} 17 | const char* ImGuiTestEngine_FindItemDebugLabel(ImGuiContext*, ImGuiID) { return nullptr; } 18 | 19 | #endif -------------------------------------------------------------------------------- /lib/libimhex/source/helpers/utils_linux.cpp: -------------------------------------------------------------------------------- 1 | #if defined(OS_LINUX) 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | namespace hex { 10 | 11 | void executeCmd(const std::vector &argsVector) { 12 | std::vector cArgsVector; 13 | for (const auto &str : argsVector) { 14 | cArgsVector.push_back(const_cast(str.c_str())); 15 | } 16 | cArgsVector.push_back(nullptr); 17 | 18 | if (fork() == 0) { 19 | execvp(cArgsVector[0], &cArgsVector[0]); 20 | log::error("execvp() failed: {}", strerror(errno)); 21 | exit(EXIT_FAILURE); 22 | } 23 | } 24 | 25 | } 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /lib/libimhex/source/providers/memory_provider.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | namespace hex::prv { 6 | 7 | bool MemoryProvider::open() { 8 | if (m_data.empty()) { 9 | m_data.resize(1); 10 | } 11 | 12 | return true; 13 | } 14 | 15 | void MemoryProvider::readRaw(u64 offset, void *buffer, size_t size) { 16 | auto actualSize = this->getActualSize(); 17 | if (actualSize == 0 || (offset + size) > actualSize || buffer == nullptr || size == 0) 18 | return; 19 | 20 | std::memcpy(buffer, &m_data.front() + offset, size); 21 | } 22 | 23 | void MemoryProvider::writeRaw(u64 offset, const void *buffer, size_t size) { 24 | if ((offset + size) > this->getActualSize() || buffer == nullptr || size == 0) 25 | return; 26 | 27 | std::memcpy(&m_data.front() + offset, buffer, size); 28 | } 29 | 30 | void MemoryProvider::resizeRaw(u64 newSize) { 31 | m_data.resize(newSize); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /lib/libimhex/source/test/tests.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex::test { 4 | 5 | static std::map s_tests; 6 | int Tests::addTest(const std::string &name, Function func, bool shouldFail) noexcept { 7 | s_tests.insert({ 8 | name, {func, shouldFail} 9 | }); 10 | 11 | return 0; 12 | } 13 | 14 | std::map &Tests::get() noexcept { 15 | return s_tests; 16 | } 17 | 18 | bool initPluginImpl(std::string name) { 19 | if (name != "Built-in") { 20 | if(!initPluginImpl("Built-in")) return false; 21 | } 22 | 23 | hex::Plugin *plugin = hex::PluginManager::getPlugin(name); 24 | if (plugin == nullptr) { 25 | hex::log::fatal("Plugin '{}' was not found !", name); 26 | return false; 27 | }else if (!plugin->initializePlugin()) { 28 | hex::log::fatal("Failed to initialize plugin '{}' !", name); 29 | return false; 30 | } 31 | 32 | hex::log::info("Initialized plugin '{}' successfully", name); 33 | return true; 34 | } 35 | } -------------------------------------------------------------------------------- /lib/libimhex/source/ui/banner.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace hex::impl { 5 | 6 | [[nodiscard]] std::list> &BannerBase::getOpenBanners() { 7 | static AutoReset>> openBanners; 8 | 9 | return openBanners; 10 | } 11 | 12 | std::mutex& BannerBase::getMutex() { 13 | static std::mutex mutex; 14 | 15 | return mutex; 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /lib/libimhex/source/ui/popup.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace hex::impl { 5 | 6 | 7 | [[nodiscard]] std::vector> &PopupBase::getOpenPopups() { 8 | static AutoReset>> openPopups; 9 | 10 | return openPopups; 11 | } 12 | 13 | std::mutex& PopupBase::getMutex() { 14 | static std::mutex mutex; 15 | 16 | return mutex; 17 | } 18 | 19 | 20 | 21 | } -------------------------------------------------------------------------------- /lib/libimhex/source/ui/toast.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace hex::impl { 5 | 6 | [[nodiscard]] std::list> &ToastBase::getQueuedToasts() { 7 | static AutoReset>> queuedToasts; 8 | 9 | return queuedToasts; 10 | } 11 | 12 | std::mutex& ToastBase::getMutex() { 13 | static std::mutex mutex; 14 | 15 | return mutex; 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /lib/third_party/boost/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(boost) 2 | 3 | add_subdirectory(regex) -------------------------------------------------------------------------------- /lib/third_party/boost/regex/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(boost-regex) 2 | 3 | add_library(boost-regex INTERFACE) 4 | 5 | target_include_directories(boost-regex INTERFACE 6 | include 7 | ) 8 | target_compile_definitions(boost-regex INTERFACE BOOST_REGEX_STANDALONE) 9 | 10 | add_library(boost::regex ALIAS boost-regex) -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/cregex.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 1998-2002 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org/libs/regex for most recent version. 14 | * FILE cregex.cpp 15 | * VERSION see 16 | * DESCRIPTION: Declares POSIX API functions 17 | * + boost::RegEx high level wrapper. 18 | */ 19 | 20 | #ifndef BOOST_RE_CREGEX_HPP 21 | #define BOOST_RE_CREGEX_HPP 22 | 23 | #ifndef BOOST_REGEX_CONFIG_HPP 24 | #include 25 | #endif 26 | 27 | #ifdef BOOST_REGEX_CXX03 28 | #include 29 | #else 30 | #include 31 | #endif 32 | 33 | #endif /* include guard */ 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 1998-2002 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org/libs/regex for documentation. 14 | * FILE regex.cpp 15 | * VERSION see 16 | * DESCRIPTION: Declares boost::basic_regex<> and associated 17 | * functions and classes. This header is the main 18 | * entry point for the template regex code. 19 | */ 20 | 21 | 22 | /* start with C compatibility API */ 23 | 24 | #ifndef BOOST_RE_REGEX_HPP 25 | #define BOOST_RE_REGEX_HPP 26 | 27 | #ifndef BOOST_REGEX_CONFIG_HPP 28 | #include 29 | #endif 30 | 31 | #ifdef BOOST_REGEX_CXX03 32 | #include 33 | #else 34 | #include 35 | #endif 36 | 37 | #endif // include 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex/icu.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2020 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org for most recent version. 14 | * FILE icu.hpp 15 | * VERSION see 16 | * DESCRIPTION: Unicode regular expressions on top of the ICU Library. 17 | */ 18 | 19 | #ifndef BOOST_REGEX_ICU_HPP 20 | #define BOOST_REGEX_ICU_HPP 21 | 22 | #include 23 | 24 | #ifdef BOOST_REGEX_CXX03 25 | #include 26 | #else 27 | #include 28 | #endif 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex/pattern_except.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 1998-2002 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org for most recent version. 14 | * FILE pattern_except.hpp 15 | * VERSION see 16 | * DESCRIPTION: Declares pattern-matching exception classes. 17 | */ 18 | 19 | #ifndef BOOST_RE_PAT_EXCEPT_HPP 20 | #define BOOST_RE_PAT_EXCEPT_HPP 21 | 22 | #ifndef BOOST_REGEX_CONFIG_HPP 23 | #include 24 | #endif 25 | 26 | #ifdef BOOST_REGEX_CXX03 27 | #include 28 | #else 29 | #include 30 | #endif 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex/pending/object_cache.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2004 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org for most recent version. 14 | * FILE object_cache.hpp 15 | * VERSION see 16 | * DESCRIPTION: Implements a generic object cache. 17 | */ 18 | 19 | #ifndef BOOST_REGEX_OBJECT_CACHE_HPP 20 | #define BOOST_REGEX_OBJECT_CACHE_HPP 21 | 22 | #include 23 | #ifdef BOOST_REGEX_CXX03 24 | #include 25 | #else 26 | #include 27 | #endif 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex/pending/unicode_iterator.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 2020 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org for most recent version. 14 | * FILE unicode_iterator.hpp 15 | * VERSION see 16 | * DESCRIPTION: Iterator adapters for converting between different Unicode encodings. 17 | */ 18 | 19 | #ifndef BOOST_REGEX_PENDING_UNICODE_ITERATOR_HPP 20 | #define BOOST_REGEX_PENDING_UNICODE_ITERATOR_HPP 21 | 22 | #include 23 | 24 | #if defined(BOOST_REGEX_CXX03) 25 | #include 26 | #else 27 | #include 28 | #endif 29 | 30 | 31 | #endif // BOOST_REGEX_PENDING_UNICODE_ITERATOR_HPP 32 | 33 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex/regex_traits.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 1998-2002 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org for most recent version. 14 | * FILE regex_traits.hpp 15 | * VERSION see 16 | * DESCRIPTION: Declares regular expression traits classes. 17 | */ 18 | 19 | #ifndef BOOST_REGEX_TRAITS_HPP 20 | #define BOOST_REGEX_TRAITS_HPP 21 | 22 | #ifndef BOOST_REGEX_CONFIG_HPP 23 | # include 24 | #endif 25 | 26 | # ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED 27 | #ifdef BOOST_REGEX_CXX03 28 | # include 29 | #else 30 | # include 31 | #endif 32 | # endif 33 | 34 | #endif // include 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex/v5/iterator_traits.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 1998-2002 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org for most recent version. 14 | * FILE iterator_traits.cpp 15 | * VERSION see 16 | * DESCRIPTION: Declares iterator traits workarounds. 17 | */ 18 | 19 | #ifndef BOOST_REGEX_V5_ITERATOR_TRAITS_HPP 20 | #define BOOST_REGEX_V5_ITERATOR_TRAITS_HPP 21 | 22 | namespace boost{ 23 | namespace BOOST_REGEX_DETAIL_NS{ 24 | 25 | template 26 | struct regex_iterator_traits : public std::iterator_traits {}; 27 | 28 | } // namespace BOOST_REGEX_DETAIL_NS 29 | } // namespace boost 30 | 31 | #endif 32 | 33 | -------------------------------------------------------------------------------- /lib/third_party/boost/regex/include/boost/regex_fwd.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Copyright (c) 1998-2002 4 | * John Maddock 5 | * 6 | * Use, modification and distribution are subject to the 7 | * Boost Software License, Version 1.0. (See accompanying file 8 | * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | * 10 | */ 11 | 12 | /* 13 | * LOCATION: see http://www.boost.org/libs/regex for documentation. 14 | * FILE regex_fwd.cpp 15 | * VERSION see 16 | * DESCRIPTION: Forward declares boost::basic_regex<> and 17 | * associated typedefs. 18 | */ 19 | 20 | #ifndef BOOST_REGEX_FWD_HPP 21 | #define BOOST_REGEX_FWD_HPP 22 | 23 | #ifndef BOOST_REGEX_CONFIG_HPP 24 | #include 25 | #endif 26 | 27 | #ifdef BOOST_REGEX_CXX03 28 | #include 29 | #else 30 | #include 31 | #endif 32 | 33 | #endif 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /lib/third_party/imgui/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(imgui) 3 | 4 | set(CMAKE_CXX_STANDARD 23) 5 | 6 | add_library(imgui_all_includes INTERFACE) 7 | 8 | add_subdirectory(imgui) 9 | add_subdirectory(cimgui) 10 | add_subdirectory(implot) 11 | add_subdirectory(implot3d) 12 | add_subdirectory(imnodes) 13 | add_subdirectory(backend) 14 | add_subdirectory(ColorTextEditor) 15 | add_subdirectory(imgui_test_engine) 16 | 17 | set(IMGUI_LIBRARIES imgui_imgui imgui_cimgui imgui_implot imgui_implot3d imgui_imnodes imgui_backend imgui_color_text_editor) 18 | set(IMGUI_LIBRARIES ${IMGUI_LIBRARIES} PARENT_SCOPE) 19 | 20 | if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD) 21 | foreach (LIBRARY IN LISTS IMGUI_LIBRARIES) 22 | target_compile_definitions(${LIBRARY} PRIVATE EXPORT_SYMBOLS=1) 23 | endforeach () 24 | endif() -------------------------------------------------------------------------------- /lib/third_party/imgui/ColorTextEditor/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | # https://github.com/BalazsJako/ImGuiColorTextEdit 3 | project(imgui_color_text_editor) 4 | 5 | set(CMAKE_CXX_STANDARD 23) 6 | 7 | if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD) 8 | add_library(imgui_color_text_editor OBJECT 9 | source/TextEditor.cpp 10 | ) 11 | 12 | target_include_directories(imgui_color_text_editor PUBLIC 13 | include 14 | ) 15 | 16 | target_link_libraries(imgui_color_text_editor PRIVATE imgui_includes) 17 | endif() 18 | 19 | target_include_directories(imgui_all_includes INTERFACE include) 20 | 21 | -------------------------------------------------------------------------------- /lib/third_party/imgui/ColorTextEditor/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 BalazsJako 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/third_party/imgui/backend/include/opengl_support.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #if !defined(WINGDIAPI) 4 | #define WINGDIAPI extern "C" 5 | #endif 6 | 7 | #if !defined(APIENTRY) 8 | #define APIENTRY 9 | #endif 10 | 11 | #if defined(OS_WEB) 12 | #define GLFW_INCLUDE_ES3 13 | #include 14 | #else 15 | #include 16 | #endif -------------------------------------------------------------------------------- /lib/third_party/imgui/cimgui/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | # https://github.com/cimgui/cimgui 4 | project(imgui_cimgui) 5 | 6 | set(CMAKE_CXX_STANDARD 23) 7 | 8 | if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD) 9 | add_library(imgui_cimgui OBJECT 10 | source/cimgui.cpp 11 | ) 12 | 13 | target_include_directories(imgui_cimgui PUBLIC 14 | include 15 | ) 16 | 17 | target_link_libraries(imgui_cimgui PRIVATE imgui_includes) 18 | add_dependencies(imhex_all imgui_cimgui) 19 | endif() 20 | 21 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imgui/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2023 Omar Cornut 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imgui_test_engine/include/imgui_te_ui.h: -------------------------------------------------------------------------------- 1 | // dear imgui test engine 2 | // (ui) 3 | // If you run tests in an interactive or visible application, you may want to call ImGuiTestEngine_ShowTestEngineWindows() 4 | 5 | // This file is governed by the "Dear ImGui Test Engine License". 6 | // Details of the license are provided in the LICENSE.txt file in the same directory. 7 | 8 | // Provide access to: 9 | // - "Dear ImGui Test Engine" main interface 10 | // - "Dear ImGui Capture Tool" 11 | // - "Dear ImGui Perf Tool" 12 | // - other core debug functions: Metrics, Debug Log 13 | 14 | #pragma once 15 | 16 | #ifndef IMGUI_VERSION 17 | #include "imgui.h" // IMGUI_API 18 | #endif 19 | 20 | // Forward declarations 21 | struct ImGuiTestEngine; 22 | 23 | // Functions 24 | IMGUI_API void ImGuiTestEngine_ShowTestEngineWindows(ImGuiTestEngine* engine, bool* p_open); 25 | IMGUI_API void ImGuiTestEngine_OpenSourceFile(ImGuiTestEngine* engine, const char* source_filename, int source_line_no); 26 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imgui_test_engine/include/thirdparty/README.md: -------------------------------------------------------------------------------- 1 | ## Third party libraries used by Test Engine 2 | 3 | Always used: 4 | - `Str/Str.h` simple string type, used by `imgui_test_engine` (Public Domain) 5 | 6 | Used if `IMGUI_TEST_ENGINE_ENABLE_CAPTURE` is defined to 1 (default: 1) 7 | - `stb/imstb_image_write.h` image writer, used by `imgui_capture_tool` (MIT Licence OR Public Domain) 8 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imgui_test_engine/include/thirdparty/Str/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{h,cpp}] 2 | indent_style = space 3 | indent_size = 4 4 | 5 | 6 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imgui_test_engine/include/thirdparty/Str/Str.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | { Data, na } 7 | 8 | Data, na 9 | strlen(Data) 10 | Capacity 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imnodes/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | # https://github.com/Nelarius/imnodes 3 | project(imgui_imnodes) 4 | 5 | set(CMAKE_CXX_STANDARD 23) 6 | 7 | if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD) 8 | add_library(imgui_imnodes OBJECT 9 | source/imnodes.cpp 10 | ) 11 | 12 | target_include_directories(imgui_imnodes PUBLIC 13 | include 14 | ) 15 | 16 | target_link_libraries(imgui_imnodes PRIVATE imgui_includes) 17 | endif() 18 | 19 | target_include_directories(imgui_all_includes INTERFACE include) 20 | -------------------------------------------------------------------------------- /lib/third_party/imgui/imnodes/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Johann Muszynski 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /lib/third_party/imgui/implot/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | # https://github.com/epezent/implot 3 | project(imgui_implot) 4 | 5 | set(CMAKE_CXX_STANDARD 23) 6 | 7 | if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD) 8 | add_library(imgui_implot OBJECT 9 | source/implot.cpp 10 | source/implot_items.cpp 11 | source/implot_demo.cpp 12 | ) 13 | 14 | target_include_directories(imgui_implot PUBLIC 15 | include 16 | ) 17 | 18 | target_link_libraries(imgui_implot PRIVATE imgui_includes) 19 | endif() 20 | 21 | target_include_directories(imgui_all_includes INTERFACE include) 22 | -------------------------------------------------------------------------------- /lib/third_party/imgui/implot/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Evan Pezent 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/third_party/imgui/implot3d/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | # https://github.com/brenocq/implot3d 3 | project(imgui_implot3d) 4 | 5 | set(CMAKE_CXX_STANDARD 23) 6 | 7 | if (NOT IMHEX_EXTERNAL_PLUGIN_BUILD) 8 | add_library(imgui_implot3d OBJECT 9 | source/implot3d.cpp 10 | source/implot3d_items.cpp 11 | source/implot3d_demo.cpp 12 | source/implot3d_meshes.cpp 13 | ) 14 | 15 | target_include_directories(imgui_implot3d PUBLIC 16 | include 17 | ) 18 | 19 | target_link_libraries(imgui_implot3d PRIVATE imgui_includes) 20 | endif() 21 | 22 | target_include_directories(imgui_all_includes INTERFACE include) 23 | -------------------------------------------------------------------------------- /lib/third_party/imgui/implot3d/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Breno Cunha Queiroz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/third_party/jthread/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(jthread) 4 | 5 | add_library(jthread INTERFACE) 6 | target_include_directories(jthread INTERFACE includes) -------------------------------------------------------------------------------- /lib/third_party/jthread/includes/jthread.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #if __cpp_lib_jthread >= 201911L 4 | #include 5 | #else 6 | #define __stop_callback_base __stop_callback_base_j 7 | #define __stop_state __stop_state_j 8 | #include "../jthread/source/jthread.hpp" 9 | #undef __stop_callback_base 10 | #undef __stop_state 11 | #endif -------------------------------------------------------------------------------- /lib/third_party/llvm-demangle/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(LLVMDemangle) 3 | 4 | set(CMAKE_CXX_STANDARD 17) 5 | 6 | add_library(LLVMDemangle STATIC 7 | source/Demangle.cpp 8 | source/DLangDemangle.cpp 9 | source/ItaniumDemangle.cpp 10 | source/MicrosoftDemangle.cpp 11 | source/MicrosoftDemangleNodes.cpp 12 | source/RustDemangle.cpp 13 | ) 14 | 15 | target_include_directories(LLVMDemangle PUBLIC include) 16 | -------------------------------------------------------------------------------- /lib/third_party/microtar/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(microtar) 3 | 4 | add_library(microtar STATIC 5 | source/microtar.c 6 | ) 7 | 8 | target_include_directories(microtar PUBLIC include) 9 | -------------------------------------------------------------------------------- /lib/third_party/microtar/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 rxi 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /lib/third_party/miniaudio/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | project(miniaudio) 3 | 4 | add_library(miniaudio STATIC 5 | source/miniaudio.c 6 | ) 7 | 8 | target_include_directories(miniaudio PUBLIC include) 9 | if (APPLE) 10 | set_source_files_properties(source/miniaudio.c PROPERTIES LANGUAGE OBJC) 11 | elseif (NOT MSVC) 12 | target_compile_options(miniaudio PRIVATE -Wno-unused-result) 13 | endif () 14 | -------------------------------------------------------------------------------- /lib/third_party/miniaudio/source/miniaudio.c: -------------------------------------------------------------------------------- 1 | #define MINIAUDIO_IMPLEMENTATION 2 | #include "miniaudio.h" -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/LICENSE.MIT: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2013-2022 Niels Lohmann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/cmake/config.cmake.in: -------------------------------------------------------------------------------- 1 | include(FindPackageHandleStandardArgs) 2 | set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) 3 | find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) 4 | 5 | if(NOT TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@) 6 | include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake") 7 | if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND 8 | (NOT @PROJECT_NAME@_FIND_VERSION OR 9 | @PROJECT_NAME@_FIND_VERSION VERSION_LESS 3.2.0)) 10 | add_library(@NLOHMANN_JSON_TARGET_NAME@ INTERFACE IMPORTED) 11 | set_target_properties(@NLOHMANN_JSON_TARGET_NAME@ PROPERTIES 12 | INTERFACE_LINK_LIBRARIES @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@ 13 | ) 14 | endif() 15 | endif() 16 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/cmake/nlohmann_jsonConfigVersion.cmake.in: -------------------------------------------------------------------------------- 1 | # This is essentially cmake's BasicConfigVersion-SameMajorVersion.cmake.in but 2 | # without the 32/64-bit check. Since json is a header-only library, it doesn't 3 | # matter if it was built on a different platform than what it is used on (see 4 | # https://github.com/nlohmann/json/issues/1697). 5 | set(PACKAGE_VERSION "@PROJECT_VERSION@") 6 | 7 | if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) 8 | set(PACKAGE_VERSION_COMPATIBLE FALSE) 9 | else() 10 | 11 | if(PACKAGE_FIND_VERSION_MAJOR STREQUAL "@PROJECT_VERSION_MAJOR@") 12 | set(PACKAGE_VERSION_COMPATIBLE TRUE) 13 | else() 14 | set(PACKAGE_VERSION_COMPATIBLE FALSE) 15 | endif() 16 | 17 | if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) 18 | set(PACKAGE_VERSION_EXACT TRUE) 19 | endif() 20 | endif() 21 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/cmake/pkg-config.pc.in: -------------------------------------------------------------------------------- 1 | Name: ${PROJECT_NAME} 2 | Description: JSON for Modern C++ 3 | Version: ${PROJECT_VERSION} 4 | Cflags: -I${CMAKE_INSTALL_FULL_INCLUDEDIR} 5 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/input/position_t.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include // size_t 12 | 13 | #include 14 | 15 | NLOHMANN_JSON_NAMESPACE_BEGIN 16 | namespace detail 17 | { 18 | 19 | /// struct to capture the start position of the current token 20 | struct position_t 21 | { 22 | /// the total number of characters read 23 | std::size_t chars_read_total = 0; 24 | /// the number of characters read in the current line 25 | std::size_t chars_read_current_line = 0; 26 | /// the number of lines read 27 | std::size_t lines_read = 0; 28 | 29 | /// conversion to size_t to preserve SAX interface 30 | constexpr operator size_t() const 31 | { 32 | return chars_read_total; 33 | } 34 | }; 35 | 36 | } // namespace detail 37 | NLOHMANN_JSON_NAMESPACE_END 38 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/meta/call_std/begin.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | NLOHMANN_JSON_NAMESPACE_BEGIN 14 | 15 | NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); 16 | 17 | NLOHMANN_JSON_NAMESPACE_END 18 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/meta/call_std/end.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | NLOHMANN_JSON_NAMESPACE_BEGIN 14 | 15 | NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); 16 | 17 | NLOHMANN_JSON_NAMESPACE_END 18 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/meta/identity_tag.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | NLOHMANN_JSON_NAMESPACE_BEGIN 14 | namespace detail 15 | { 16 | 17 | // dispatching helper struct 18 | template struct identity_tag {}; 19 | 20 | } // namespace detail 21 | NLOHMANN_JSON_NAMESPACE_END 22 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/meta/std_fs.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | #if JSON_HAS_EXPERIMENTAL_FILESYSTEM 14 | #include 15 | NLOHMANN_JSON_NAMESPACE_BEGIN 16 | namespace detail 17 | { 18 | namespace std_fs = std::experimental::filesystem; 19 | } // namespace detail 20 | NLOHMANN_JSON_NAMESPACE_END 21 | #elif JSON_HAS_FILESYSTEM 22 | #include // NOLINT(build/c++17) 23 | NLOHMANN_JSON_NAMESPACE_BEGIN 24 | namespace detail 25 | { 26 | namespace std_fs = std::filesystem; 27 | } // namespace detail 28 | NLOHMANN_JSON_NAMESPACE_END 29 | #endif 30 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/meta/void_t.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | NLOHMANN_JSON_NAMESPACE_BEGIN 14 | namespace detail 15 | { 16 | 17 | template struct make_void 18 | { 19 | using type = void; 20 | }; 21 | template using void_t = typename make_void::type; 22 | 23 | } // namespace detail 24 | NLOHMANN_JSON_NAMESPACE_END 25 | -------------------------------------------------------------------------------- /lib/third_party/nlohmann_json/include/nlohmann/detail/string_utils.hpp: -------------------------------------------------------------------------------- 1 | // __ _____ _____ _____ 2 | // __| | __| | | | JSON for Modern C++ 3 | // | | |__ | | | | | | version 3.12.0 4 | // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 | // 6 | // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann 7 | // SPDX-License-Identifier: MIT 8 | 9 | #pragma once 10 | 11 | #include // size_t 12 | #include // string, to_string 13 | 14 | #include 15 | 16 | NLOHMANN_JSON_NAMESPACE_BEGIN 17 | namespace detail 18 | { 19 | 20 | template 21 | void int_to_string(StringType& target, std::size_t value) 22 | { 23 | // For ADL 24 | using std::to_string; 25 | target = to_string(value); 26 | } 27 | 28 | template 29 | StringType to_string(std::size_t value) 30 | { 31 | StringType result; 32 | int_to_string(result, value); 33 | return result; 34 | } 35 | 36 | } // namespace detail 37 | NLOHMANN_JSON_NAMESPACE_END 38 | -------------------------------------------------------------------------------- /lib/trace/include/hex/trace/exceptions.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::trace { 8 | 9 | std::optional getLastExceptionStackTrace(); 10 | 11 | } -------------------------------------------------------------------------------- /lib/trace/include/hex/trace/stacktrace.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | namespace hex::trace { 8 | 9 | struct StackFrame { 10 | std::string file; 11 | std::string function; 12 | std::uint32_t line; 13 | }; 14 | 15 | using StackTrace = std::vector; 16 | 17 | void initialize(); 18 | 19 | struct StackTraceResult { 20 | std::vector stackFrames; 21 | std::string implementationName; 22 | }; 23 | 24 | StackTraceResult getStackTrace(); 25 | 26 | } -------------------------------------------------------------------------------- /lib/trace/source/exceptions.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex::trace { 4 | 5 | static std::optional s_lastExceptionStackTrace; 6 | std::optional getLastExceptionStackTrace() { 7 | if (!s_lastExceptionStackTrace.has_value()) 8 | return std::nullopt; 9 | 10 | auto result = s_lastExceptionStackTrace.value(); 11 | s_lastExceptionStackTrace.reset(); 12 | 13 | return result; 14 | } 15 | 16 | } 17 | 18 | #if defined(HEX_WRAP_CXA_THROW) 19 | 20 | extern "C" { 21 | 22 | [[noreturn]] void __real___cxa_throw(void* thrownException, void* type, void (*destructor)(void*)); 23 | [[noreturn]] void __wrap___cxa_throw(void* thrownException, void* type, void (*destructor)(void*)) { 24 | hex::trace::s_lastExceptionStackTrace = hex::trace::getStackTrace(); 25 | __real___cxa_throw(thrownException, type, destructor); 26 | } 27 | 28 | } 29 | 30 | #endif -------------------------------------------------------------------------------- /lib/trace/source/instr_entry.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex { 4 | 5 | void functionEntry(void *); 6 | void functionExit(void *); 7 | 8 | } 9 | 10 | extern "C" { 11 | 12 | static std::mutex s_mutex; 13 | 14 | [[gnu::no_instrument_function]] 15 | void __cyg_profile_func_enter(void *functionAddress, void *) { 16 | std::scoped_lock lock(s_mutex); 17 | 18 | hex::functionEntry(functionAddress); 19 | } 20 | 21 | [[gnu::no_instrument_function]] 22 | void __cyg_profile_func_exit(void *functionAddress, void *) { 23 | std::scoped_lock lock(s_mutex); 24 | 25 | hex::functionExit(functionAddress); 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /main/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | if (WIN32) 2 | set(IMHEX_APPLICATION_NAME "imhex-gui") 3 | else () 4 | set(IMHEX_APPLICATION_NAME "imhex") 5 | endif () 6 | 7 | add_subdirectory(gui) 8 | if (WIN32) 9 | add_subdirectory(forwarder) 10 | endif () 11 | 12 | if (NOT EMSCRIPTEN) 13 | add_subdirectory(updater) 14 | endif () -------------------------------------------------------------------------------- /main/forwarder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(main-forwarder) 2 | 3 | add_executable(main-forwarder 4 | source/main.cpp 5 | ${IMHEX_ICON} 6 | ) 7 | 8 | target_link_libraries(main-forwarder PRIVATE wolv::io ${FMT_LIBRARIES}) 9 | add_dependencies(imhex_all main-forwarder) 10 | set_target_properties(main-forwarder PROPERTIES 11 | OUTPUT_NAME "imhex" 12 | RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../.. 13 | ) 14 | 15 | if (WIN32) 16 | if (MSVC) 17 | target_link_options(main-forwarder PRIVATE /MANIFEST:NO) 18 | endif() 19 | endif() -------------------------------------------------------------------------------- /main/gui/include/crash_handlers.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace hex::crash { 4 | 5 | void setupCrashHandlers(); 6 | 7 | } -------------------------------------------------------------------------------- /main/gui/include/init/run.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::init { 6 | 7 | void handleFileOpenRequest(); 8 | 9 | std::unique_ptr initializeImHex(); 10 | void deinitializeImHex(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /main/gui/include/init/tasks.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::init { 8 | 9 | /** 10 | * @brief Runs the exit tasks and print them to console 11 | */ 12 | void runExitTasks(); 13 | 14 | std::vector getInitTasks(); 15 | std::vector getExitTasks(); 16 | } -------------------------------------------------------------------------------- /main/gui/include/messaging.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | /** 9 | * Cross-instance (cross-process) messaging system 10 | * As of now, this system may not be stable for use beyond its current use: 11 | * forwarding providers opened in new instances 12 | */ 13 | namespace hex::messaging { 14 | 15 | /** 16 | * @brief Setup everything to be able to send/receive messages 17 | */ 18 | void setupMessaging(); 19 | 20 | /** 21 | * @brief Internal method - setup platform-specific things to be able to send messages 22 | * @return if this instance has been determined to be the main instance 23 | */ 24 | bool setupNative(); 25 | 26 | /** 27 | * @brief Internal method - send a message to another Imhex instance in a platform-specific way 28 | */ 29 | void sendToOtherInstance(const std::string &eventName, const std::vector &args); 30 | 31 | /** 32 | * @brief Internal method - called by platform-specific code when a event has been received 33 | */ 34 | void messageReceived(const std::string &eventName, const std::vector &args); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /main/gui/source/messaging/macos.cpp: -------------------------------------------------------------------------------- 1 | #if defined(OS_MACOS) 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | #include "messaging.hpp" 9 | 10 | namespace hex::messaging { 11 | 12 | void sendToOtherInstance(const std::string &eventName, const std::vector &args) { 13 | log::debug("Sending event {} to another instance (not us)", eventName); 14 | 15 | // Create the message 16 | std::vector fullEventData(eventName.begin(), eventName.end()); 17 | fullEventData.push_back('\0'); 18 | 19 | fullEventData.insert(fullEventData.end(), args.begin(), args.end()); 20 | 21 | u8 *data = &fullEventData[0]; 22 | auto dataSize = fullEventData.size(); 23 | 24 | macosSendMessageToMainInstance(data, dataSize); 25 | } 26 | 27 | bool setupNative() { 28 | macosInstallEventListener(); 29 | return macosIsMainInstance(); 30 | } 31 | } 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /main/gui/source/messaging/web.cpp: -------------------------------------------------------------------------------- 1 | #if defined(OS_WEB) 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include "messaging.hpp" 8 | 9 | namespace hex::messaging { 10 | 11 | void sendToOtherInstance(const std::string &eventName, const std::vector &args) { 12 | std::ignore = eventName; 13 | std::ignore = args; 14 | log::error("Unimplemented function 'sendToOtherInstance()' called"); 15 | } 16 | 17 | // Not implemented, so lets say we are the main instance every time so events are forwarded to ourselves 18 | bool setupNative() { 19 | return true; 20 | } 21 | } 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /main/updater/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(updater) 2 | 3 | add_executable(updater 4 | source/main.cpp 5 | ) 6 | 7 | target_compile_definitions(updater PRIVATE IMHEX_PROJECT_NAME="${PROJECT_NAME}") 8 | target_link_libraries(updater PRIVATE libimhex ${FMT_LIBRARIES}) 9 | add_dependencies(main updater) 10 | setupCompilerFlags(updater) 11 | 12 | 13 | set_target_properties(updater PROPERTIES 14 | OUTPUT_NAME "imhex-updater" 15 | RUNTIME_OUTPUT_DIRECTORY ${IMHEX_MAIN_OUTPUT_DIRECTORY} 16 | ) -------------------------------------------------------------------------------- /plugins/builtin/include/content/data_processor_nodes.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex::plugin::builtin { 4 | 5 | void registerBasicDataProcessorNodes(); 6 | void registerVisualDataProcessorNodes(); 7 | void registerLogicDataProcessorNodes(); 8 | void registerControlDataProcessorNodes(); 9 | void registerDecodeDataProcessorNodes(); 10 | void registerMathDataProcessorNodes(); 11 | void registerOtherDataProcessorNodes(); 12 | 13 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/export_formatters/export_formatter_json.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "export_formatter.hpp" 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin::export_fmt { 8 | 9 | class ExportFormatterJson : public ExportFormatter { 10 | public: 11 | ExportFormatterJson() : ExportFormatter("json") {} 12 | 13 | ~ExportFormatterJson() override = default; 14 | 15 | std::vector format(const std::vector &occurrences, std::function occurrenceFunc) override { 16 | nlohmann::json resultJson; 17 | 18 | for (const auto &occurrence : occurrences) { 19 | std::string formattedResult = occurrenceFunc(occurrence); 20 | 21 | nlohmann::json obj = { 22 | { "offset", occurrence.region.getStartAddress() }, 23 | { "size", occurrence.region.getSize() }, 24 | { "data", formattedResult } 25 | }; 26 | 27 | resultJson.push_back(obj); 28 | } 29 | 30 | auto result = resultJson.dump(4); 31 | return { result.begin(), result.end() }; 32 | } 33 | }; 34 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/export_formatters/export_formatter_tsv.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "export_formatter_csv.hpp" 4 | 5 | namespace hex::plugin::builtin::export_fmt { 6 | 7 | class ExportFormatterTsv : public ExportFormatterCsv { 8 | public: 9 | ExportFormatterTsv() : ExportFormatterCsv("tsv") {} 10 | 11 | ~ExportFormatterTsv() override = default; 12 | 13 | protected: 14 | [[nodiscard]] char getSeparatorCharacter() const override { return '\t'; } 15 | }; 16 | 17 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/global_actions.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace hex::plugin::builtin { 4 | 5 | void openProject(); 6 | bool saveProject(); 7 | bool saveProjectAs(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /plugins/builtin/include/content/helpers/demangle.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::plugin::builtin { 6 | 7 | std::string demangle(const std::string &mangled); 8 | 9 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/providers/base64_provider.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::plugin::builtin { 6 | 7 | class Base64Provider : public FileProvider { 8 | public: 9 | explicit Base64Provider() = default; 10 | ~Base64Provider() override = default; 11 | 12 | void readRaw(u64 offset, void *buffer, size_t size) override; 13 | void writeRaw(u64 offset, const void *buffer, size_t size) override; 14 | [[nodiscard]] u64 getActualSize() const override { return (3 * m_file.getSize()) / 4; } 15 | 16 | void resizeRaw(u64 newSize) override; 17 | void insertRaw(u64 offset, u64 size) override; 18 | void removeRaw(u64 offset, u64 size) override; 19 | 20 | [[nodiscard]] UnlocalizedString getTypeName() const override { 21 | return "hex.builtin.provider.base64"; 22 | } 23 | }; 24 | 25 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/providers/motorola_srec_provider.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::plugin::builtin { 6 | 7 | class MotorolaSRECProvider : public IntelHexProvider { 8 | public: 9 | MotorolaSRECProvider() = default; 10 | ~MotorolaSRECProvider() override = default; 11 | 12 | bool open() override; 13 | void close() override; 14 | 15 | [[nodiscard]] std::string getName() const override; 16 | std::vector getDataDescription() const override; 17 | 18 | [[nodiscard]] UnlocalizedString getTypeName() const override { 19 | return "hex.builtin.provider.motorola_srec"; 20 | } 21 | 22 | bool handleFilePicker() override; 23 | }; 24 | 25 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/tools_entries.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex::plugin::builtin { 4 | 5 | void drawDemangler(); 6 | void drawASCIITable(); 7 | void drawRegexReplacer(); 8 | void drawColorPicker(); 9 | void drawMathEvaluator(); 10 | void drawGraphingCalculator(); 11 | void drawBaseConverter(); 12 | void drawByteSwapper(); 13 | void drawPermissionsCalculator(); 14 | // void drawFileUploader(); 15 | void drawWikiExplainer(); 16 | 17 | void drawIEEE754Decoder(); 18 | void drawInvariantMultiplicationDecoder(); 19 | void drawTCPClientServer(); 20 | void drawEuclidianAlgorithm(); 21 | 22 | void drawFileToolShredder(); 23 | void drawFileToolSplitter(); 24 | void drawFileToolCombiner(); 25 | 26 | void drawHTTPRequestMaker(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_bookmarks.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include 8 | 9 | namespace hex::plugin::builtin { 10 | 11 | class ViewBookmarks : public View::Window { 12 | public: 13 | ViewBookmarks(); 14 | ~ViewBookmarks() override; 15 | 16 | void drawContent() override; 17 | 18 | private: 19 | struct Bookmark { 20 | ImHexApi::Bookmarks::Entry entry; 21 | bool highlightVisible; 22 | }; 23 | 24 | private: 25 | void drawDropTarget(std::list::iterator it, float height); 26 | 27 | bool importBookmarks(hex::prv::Provider *provider, const nlohmann::json &json); 28 | bool exportBookmarks(hex::prv::Provider *provider, nlohmann::json &json); 29 | 30 | void registerMenuItems(); 31 | 32 | private: 33 | std::string m_currFilter; 34 | 35 | PerProvider> m_bookmarks; 36 | PerProvider m_currBookmarkId; 37 | }; 38 | 39 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_constants.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin { 8 | 9 | enum class ConstantType 10 | { 11 | Int10, 12 | Int16BigEndian, 13 | Int16LittleEndian 14 | }; 15 | 16 | struct Constant { 17 | std::string name, description; 18 | std::string category; 19 | ConstantType type; 20 | std::string value; 21 | }; 22 | 23 | class ViewConstants : public View::Window { 24 | public: 25 | explicit ViewConstants(); 26 | ~ViewConstants() override = default; 27 | 28 | void drawContent() override; 29 | 30 | private: 31 | void reloadConstants(); 32 | 33 | std::vector m_constants; 34 | std::vector m_filterIndices; 35 | std::string m_filter; 36 | }; 37 | 38 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_information.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace hex::plugin::builtin { 9 | 10 | class ViewInformation : public View::Window { 11 | public: 12 | explicit ViewInformation(); 13 | ~ViewInformation() override = default; 14 | 15 | void drawContent() override; 16 | 17 | private: 18 | void analyze(); 19 | 20 | struct AnalysisData { 21 | bool valid = false; 22 | 23 | TaskHolder task; 24 | const prv::Provider *analyzedProvider = nullptr; 25 | Region analysisRegion = { 0, 0 }; 26 | 27 | ui::RegionType selectionType = ui::RegionType::EntireData; 28 | 29 | std::list> informationSections; 30 | }; 31 | 32 | PerProvider m_analysisData; 33 | }; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_logs.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::plugin::builtin { 6 | 7 | class ViewLogs : public View::Floating { 8 | public: 9 | ViewLogs(); 10 | ~ViewLogs() override = default; 11 | 12 | void drawContent() override; 13 | 14 | [[nodiscard]] bool shouldDraw() const override { return true; } 15 | [[nodiscard]] bool hasViewMenuItemEntry() const override { return false; } 16 | 17 | private: 18 | int m_logLevel = 1; 19 | }; 20 | 21 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_patches.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin { 8 | 9 | class ViewPatches : public View::Window { 10 | public: 11 | explicit ViewPatches(); 12 | ~ViewPatches() override; 13 | 14 | void drawContent() override; 15 | void drawAlwaysVisibleContent() override; 16 | 17 | private: 18 | u64 m_selectedPatch = 0x00; 19 | PerProvider m_numOperations; 20 | PerProvider m_savedOperations; 21 | }; 22 | 23 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_pattern_data.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin { 8 | 9 | class ViewPatternData : public View::Window { 10 | public: 11 | ViewPatternData(); 12 | ~ViewPatternData() override; 13 | 14 | void drawContent() override; 15 | 16 | private: 17 | bool m_rowColoring = false; 18 | u32 m_maxFilterItems = 128; 19 | ui::PatternDrawer::TreeStyle m_treeStyle = ui::PatternDrawer::TreeStyle::Default; 20 | 21 | PerProvider> m_patternDrawer; 22 | Region m_hoveredPatternRegion = Region::Invalid(); 23 | }; 24 | 25 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_provider_settings.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::plugin::builtin { 6 | 7 | class ViewProviderSettings : public View::Modal { 8 | public: 9 | ViewProviderSettings(); 10 | ~ViewProviderSettings() override; 11 | 12 | void drawContent() override; 13 | 14 | [[nodiscard]] bool hasViewMenuItemEntry() const override; 15 | 16 | [[nodiscard]] bool shouldDraw() const override { return true; } 17 | 18 | ImVec2 getMinSize() const override { return { -1, -1 }; } 19 | ImVec2 getMaxSize() const override { return this->getMinSize(); } 20 | ImGuiWindowFlags getWindowFlags() const override { return ImGuiWindowFlags_AlwaysAutoResize; } 21 | 22 | bool hasCloseButton() const override { 23 | return false; 24 | } 25 | }; 26 | 27 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_settings.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace hex::plugin::builtin { 7 | 8 | class ViewSettings : public View::Modal { 9 | public: 10 | explicit ViewSettings(); 11 | ~ViewSettings() override; 12 | 13 | void drawContent() override; 14 | void drawAlwaysVisibleContent() override; 15 | 16 | [[nodiscard]] bool shouldDraw() const override { return true; } 17 | [[nodiscard]] bool hasViewMenuItemEntry() const override { return false; } 18 | 19 | [[nodiscard]] ImVec2 getMinSize() const override { return scaled({ 700, 400 }); } 20 | [[nodiscard]] ImVec2 getMaxSize() const override { return scaled({ 1400, 800 }); } 21 | 22 | private: 23 | bool m_restartRequested = false; 24 | bool m_triggerPopup = false; 25 | 26 | const ContentRegistry::Settings::impl::Category *m_selectedCategory = nullptr; 27 | }; 28 | 29 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_theme_manager.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin { 8 | 9 | class ViewThemeManager : public View::Floating { 10 | public: 11 | ViewThemeManager(); 12 | ~ViewThemeManager() override = default; 13 | 14 | void drawContent() override; 15 | 16 | [[nodiscard]] bool shouldDraw() const override { return true; } 17 | [[nodiscard]] bool hasViewMenuItemEntry() const override { return false; } 18 | 19 | private: 20 | std::string m_themeName; 21 | 22 | std::optional m_startingColor; 23 | std::optional m_hoveredColorId; 24 | std::optional m_hoveredHandlerName; 25 | }; 26 | 27 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_tools.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex::plugin::builtin { 9 | 10 | class ViewTools : public View::Window { 11 | public: 12 | ViewTools(); 13 | ~ViewTools() override = default; 14 | 15 | void drawContent() override; 16 | void drawAlwaysVisibleContent() override; 17 | 18 | private: 19 | std::vector::const_iterator m_dragStartIterator; 20 | 21 | std::map m_windowHeights; 22 | std::map m_detachedTools; 23 | }; 24 | 25 | } -------------------------------------------------------------------------------- /plugins/builtin/include/content/views/view_tutorials.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin { 8 | 9 | class ViewTutorials : public View::Floating { 10 | public: 11 | ViewTutorials(); 12 | ~ViewTutorials() override = default; 13 | 14 | void drawContent() override; 15 | 16 | [[nodiscard]] bool shouldDraw() const override { return true; } 17 | [[nodiscard]] bool hasViewMenuItemEntry() const override { return false; } 18 | 19 | ImVec2 getMinSize() const override { 20 | return scaled({ 600, 400 }); 21 | } 22 | 23 | ImVec2 getMaxSize() const override { 24 | return this->getMinSize(); 25 | } 26 | 27 | ImGuiWindowFlags getWindowFlags() const override { 28 | return Floating::getWindowFlags() | ImGuiWindowFlags_NoResize; 29 | } 30 | 31 | private: 32 | const TutorialManager::Tutorial *m_selectedTutorial = nullptr; 33 | }; 34 | 35 | } -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/abacus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/abacus.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/adhesive-bandage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/adhesive-bandage.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/black-question-mark-ornament.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/black-question-mark-ornament.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/bookmark-tabs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/bookmark-tabs.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/bookmark.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/brain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/brain.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/briefcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/briefcase.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/card-index-dividers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/card-index-dividers.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/clipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/clipboard.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/cloud.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/collision-symbol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/collision-symbol.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/copy.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/eye-in-speech-bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/eye-in-speech-bubble.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/frame-with-picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/frame-with-picture.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/hammer-and-pick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/hammer-and-pick.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/hammer-and-wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/hammer-and-wrench.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/hammer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/hammer.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/hourglass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/hourglass.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/linked-paperclips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/linked-paperclips.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/open-book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/open-book.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/package.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/page-facing-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/page-facing-up.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/pencil.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/right-pointing-magnifying-glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/right-pointing-magnifying-glass.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/ring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/ring.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/water-wave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/water-wave.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/achievements/wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/achievements/wrench.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/common/compass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/common/compass.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/common/donation/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/common/donation/github.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/common/donation/patreon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/common/donation/patreon.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/common/donation/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/common/donation/paypal.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/common/globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/common/globe.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/common/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/common/icon.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/dark/backdrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/dark/backdrop.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/light/backdrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/light/backdrop.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/3d_visualizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/3d_visualizer.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/bookmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/bookmarks.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/data_analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/data_analysis.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/data_processor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/data_processor.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/diffing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/diffing.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/floating_windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/floating_windows.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/patterns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/patterns.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/simplified_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/simplified_mode.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/tools.png -------------------------------------------------------------------------------- /plugins/builtin/romfs/assets/screenshots/welcome_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/builtin/romfs/assets/screenshots/welcome_screen.png -------------------------------------------------------------------------------- /plugins/builtin/source/content/data_processor_nodes.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace hex::plugin::builtin { 4 | 5 | void registerDataProcessorNodes() { 6 | registerBasicDataProcessorNodes(); 7 | registerVisualDataProcessorNodes(); 8 | registerLogicDataProcessorNodes(); 9 | registerControlDataProcessorNodes(); 10 | registerDecodeDataProcessorNodes(); 11 | registerMathDataProcessorNodes(); 12 | registerOtherDataProcessorNodes(); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /plugins/builtin/source/content/helpers/demangle.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace hex::plugin::builtin { 5 | 6 | std::string demangle(const std::string &mangled) { 7 | std::string result = llvm::demangle(mangled); 8 | if (result.empty() || result == mangled) 9 | result = llvm::demangle("_" + mangled); 10 | 11 | if (result.empty() || result == ("_" + mangled)) 12 | result = mangled; 13 | 14 | return result; 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /plugins/builtin/source/content/pl_pragmas.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex::plugin::builtin { 9 | 10 | void registerPatternLanguagePragmas() { 11 | 12 | ContentRegistry::PatternLanguage::addPragma("base_address", [](pl::PatternLanguage &runtime, const std::string &value) { 13 | auto baseAddress = strtoull(value.c_str(), nullptr, 0); 14 | 15 | ImHexApi::Provider::get()->setBaseAddress(baseAddress); 16 | runtime.setDataBaseAddress(baseAddress); 17 | 18 | return true; 19 | }); 20 | 21 | ContentRegistry::PatternLanguage::addPragma("MIME", [](pl::PatternLanguage&, const std::string &value) { 22 | return magic::isValidMIMEType(value); 23 | }); 24 | 25 | ContentRegistry::PatternLanguage::addPragma("magic", [](pl::PatternLanguage&, const std::string &) { 26 | return true; 27 | }); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /plugins/builtin/source/content/pl_visualizers.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | 6 | namespace hex::plugin::builtin { 7 | 8 | void drawHexVisualizer(pl::ptrn::Pattern &, bool, std::span arguments); 9 | void drawChunkBasedEntropyVisualizer(pl::ptrn::Pattern &, bool, std::span arguments); 10 | 11 | void registerPatternLanguageVisualizers() { 12 | using ParamCount = pl::api::FunctionParameterCount; 13 | 14 | ContentRegistry::PatternLanguage::addVisualizer("hex_viewer", drawHexVisualizer, ParamCount::exactly(1)); 15 | ContentRegistry::PatternLanguage::addVisualizer("chunk_entropy", drawChunkBasedEntropyVisualizer, ParamCount::exactly(2)); 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /plugins/builtin/source/content/pl_visualizers/chunk_entropy.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include 6 | 7 | #include 8 | 9 | namespace hex::plugin::builtin { 10 | 11 | void drawChunkBasedEntropyVisualizer(pl::ptrn::Pattern &, bool shouldReset, std::span arguments) { 12 | // Variable used to store the result to avoid having to recalculate the result at each frame 13 | static DiagramChunkBasedEntropyAnalysis analyzer; 14 | 15 | // Compute data 16 | if (shouldReset) { 17 | auto pattern = arguments[0].toPattern(); 18 | auto chunkSize = u64(arguments[1].toUnsigned()); 19 | analyzer.process(pattern->getBytes(), chunkSize); 20 | } 21 | 22 | // Show results 23 | analyzer.draw(ImVec2(400, 250), ImPlotFlags_CanvasOnly); 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /plugins/builtin/source/content/tools/byte_swapper.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | namespace hex::plugin::builtin { 11 | 12 | void drawByteSwapper() { 13 | static std::string input, buffer, output; 14 | 15 | if (ImGuiExt::InputTextIcon("hex.builtin.tools.input"_lang, ICON_VS_SYMBOL_NUMERIC, input, ImGuiInputTextFlags_CharsHexadecimal)) { 16 | auto nextAlignedSize = std::max(2, std::bit_ceil(input.size())); 17 | 18 | buffer.clear(); 19 | buffer.resize(nextAlignedSize - input.size(), '0'); 20 | buffer += input; 21 | 22 | output.clear(); 23 | for (u32 i = 0; i < buffer.size(); i += 2) { 24 | output += buffer[buffer.size() - i - 2]; 25 | output += buffer[buffer.size() - i - 1]; 26 | } 27 | } 28 | 29 | ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().DisabledAlpha); 30 | ImGuiExt::InputTextIcon("hex.builtin.tools.output"_lang, ICON_VS_SYMBOL_NUMERIC, output, ImGuiInputTextFlags_ReadOnly); 31 | ImGui::PopStyleVar(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /plugins/builtin/source/content/tutorials/tutorials.cpp: -------------------------------------------------------------------------------- 1 | namespace hex::plugin::builtin { 2 | 3 | void registerIntroductionTutorial(); 4 | 5 | void registerTutorials() { 6 | registerIntroductionTutorial(); 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /plugins/builtin/source/content/workspaces.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::builtin { 8 | 9 | void loadWorkspaces() { 10 | WorkspaceManager::reload(); 11 | 12 | auto currentWorkspace = ContentRegistry::Settings::read("hex.builtin.setting.general", "hex.builtin.setting.general.curr_workspace", "Default"); 13 | TaskManager::doLater([currentWorkspace] { 14 | WorkspaceManager::switchWorkspace(currentWorkspace); 15 | }); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /plugins/builtin/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(${IMHEX_PLUGIN_NAME}_tests) 2 | 3 | # Add new tests here # 4 | set(AVAILABLE_TESTS 5 | Providers/ReadWrite 6 | Providers/InvalidResize 7 | ) 8 | 9 | add_library(${PROJECT_NAME} OBJECT 10 | source/main.cpp 11 | ) 12 | 13 | target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/plugins/builtin/include) 14 | 15 | target_link_libraries(${PROJECT_NAME} PRIVATE libimhex) 16 | 17 | foreach (test IN LISTS AVAILABLE_TESTS) 18 | add_test(NAME "Plugin_${IMHEX_PLUGIN_NAME}/${test}" COMMAND $ "${test}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) 19 | endforeach () -------------------------------------------------------------------------------- /plugins/decompress/source/plugin_decompress.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex::plugin::decompress { 9 | 10 | void registerPatternLanguageFunctions(); 11 | 12 | } 13 | 14 | using namespace hex; 15 | using namespace hex::plugin::decompress; 16 | 17 | IMHEX_PLUGIN_SETUP("Decompressing", "WerWolv", "Support for decompressing data") { 18 | hex::log::debug("Using romfs: '{}'", romfs::name()); 19 | 20 | registerPatternLanguageFunctions(); 21 | } -------------------------------------------------------------------------------- /plugins/diffing/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | include(ImHexPlugin) 4 | 5 | if (USE_SYSTEM_EDLIB) 6 | find_package(edlib REQUIRED) 7 | else() 8 | set(BUILD_TESTING OFF CACHE BOOL "" FORCE) 9 | add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/edlib ${CMAKE_CURRENT_BINARY_DIR}/edlib EXCLUDE_FROM_ALL) 10 | enableUnityBuild(edlib) 11 | if (MSVC) 12 | target_compile_options(edlib PRIVATE /wd4244) 13 | endif () 14 | endif() 15 | 16 | add_imhex_plugin( 17 | NAME 18 | diffing 19 | SOURCES 20 | source/plugin_diffing.cpp 21 | 22 | source/content/diffing_algorithms.cpp 23 | source/content/views/view_diff.cpp 24 | INCLUDES 25 | include 26 | LIBRARIES 27 | ui 28 | fonts 29 | edlib 30 | ) -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/de_DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "de-DE", 3 | "language": "German", 4 | "country": "Germany", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "Diffing", 8 | "hex.diffing.view.diff.added": "Hinzugefügt", 9 | "hex.diffing.view.diff.modified": "Bearbeitet", 10 | "hex.diffing.view.diff.provider_a": "Provider A", 11 | "hex.diffing.view.diff.provider_b": "Provider B", 12 | "hex.diffing.view.diff.removed": "Entfernt" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/es_ES.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "es_ES", 3 | "language": "Spanish", 4 | "country": "Spain", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "Análisis de diferencias", 8 | "hex.diffing.view.diff.added": "Añadidas", 9 | "hex.diffing.view.diff.modified": "Modificadas", 10 | "hex.diffing.view.diff.provider_a": "Proveedor A", 11 | "hex.diffing.view.diff.provider_b": "Proveedor B", 12 | "hex.diffing.view.diff.removed": "Eliminados" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/it_IT.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "it-IT", 3 | "language": "Italian", 4 | "country": "Italy", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "Diffing", 8 | "hex.diffing.view.diff.added": "", 9 | "hex.diffing.view.diff.modified": "", 10 | "hex.diffing.view.diff.provider_a": "", 11 | "hex.diffing.view.diff.provider_b": "", 12 | "hex.diffing.view.diff.removed": "" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/ja_JP.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ja-JP", 3 | "language": "Japanese", 4 | "country": "Japan", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "比較", 8 | "hex.diffing.view.diff.added": "", 9 | "hex.diffing.view.diff.modified": "", 10 | "hex.diffing.view.diff.provider_a": "", 11 | "hex.diffing.view.diff.provider_b": "", 12 | "hex.diffing.view.diff.removed": "" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/ko_KR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ko-KR", 3 | "language": "Korean", 4 | "country": "Korea", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "파일 비교", 8 | "hex.diffing.view.diff.added": "추가됨", 9 | "hex.diffing.view.diff.modified": "수정됨", 10 | "hex.diffing.view.diff.provider_a": "공급자 A", 11 | "hex.diffing.view.diff.provider_b": "공급자 B", 12 | "hex.diffing.view.diff.removed": "제거됨" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/pt_BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "pt-BR", 3 | "language": "Portuguese", 4 | "country": "Brazil", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "Diferenciando", 8 | "hex.diffing.view.diff.added": "", 9 | "hex.diffing.view.diff.modified": "", 10 | "hex.diffing.view.diff.provider_a": "", 11 | "hex.diffing.view.diff.provider_b": "", 12 | "hex.diffing.view.diff.removed": "" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-CN", 3 | "country": "China", 4 | "fallback": false, 5 | "language": "Chinese (Simplified)", 6 | "translations": { 7 | "hex.diffing.algorithm.myers.description": "智能的 O(N*M) 比较算法。可以识别数据中任何位置的修改、插入和删除", 8 | "hex.diffing.algorithm.myers.name": "迈尔斯位向量算法", 9 | "hex.diffing.algorithm.myers.settings.window_size": "窗口大小", 10 | "hex.diffing.algorithm.simple.description": "简单的 O(N) 逐字节比较。\n只能识别数据末尾的字节修改和插入/删除", 11 | "hex.diffing.algorithm.simple.name": "逐个字节简单算法", 12 | "hex.diffing.view.diff.added": "添加", 13 | "hex.diffing.view.diff.algorithm": "差异算法", 14 | "hex.diffing.view.diff.modified": "修改", 15 | "hex.diffing.view.diff.name": "差异", 16 | "hex.diffing.view.diff.provider_a": "提供者A", 17 | "hex.diffing.view.diff.provider_b": "提供者B", 18 | "hex.diffing.view.diff.removed": "移除", 19 | "hex.diffing.view.diff.settings": "无可用设置", 20 | "hex.diffing.view.diff.settings.no_settings": "无可用设置", 21 | "hex.diffing.view.diff.task.diffing": "对比数据……" 22 | } 23 | } -------------------------------------------------------------------------------- /plugins/diffing/romfs/lang/zh_TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-TW", 3 | "language": "Chinese (Traditional)", 4 | "country": "Taiwan", 5 | "fallback": false, 6 | "translations": { 7 | "hex.diffing.view.diff.name": "差異", 8 | "hex.diffing.view.diff.added": "已新增", 9 | "hex.diffing.view.diff.modified": "已修改", 10 | "hex.diffing.view.diff.provider_a": "提供者 A", 11 | "hex.diffing.view.diff.provider_b": "提供者 B", 12 | "hex.diffing.view.diff.removed": "已移除" 13 | } 14 | } -------------------------------------------------------------------------------- /plugins/diffing/source/plugin_diffing.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #include "content/views/view_diff.hpp" 9 | 10 | 11 | namespace hex::plugin::diffing { 12 | 13 | void registerDiffingAlgorithms(); 14 | 15 | } 16 | 17 | using namespace hex; 18 | using namespace hex::plugin::diffing; 19 | 20 | IMHEX_PLUGIN_SETUP("Diffing", "WerWolv", "Support for diffing data") { 21 | hex::log::debug("Using romfs: '{}'", romfs::name()); 22 | 23 | for (auto &path : romfs::list("lang")) 24 | hex::ContentRegistry::Language::addLocalization(nlohmann::json::parse(romfs::get(path).string())); 25 | 26 | registerDiffingAlgorithms(); 27 | 28 | ContentRegistry::Views::add(); 29 | 30 | } -------------------------------------------------------------------------------- /plugins/disassembler/include/content/views/view_disassembler.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | 14 | namespace hex::plugin::disasm { 15 | 16 | class ViewDisassembler : public View::Window { 17 | public: 18 | explicit ViewDisassembler(); 19 | ~ViewDisassembler() override; 20 | 21 | void drawContent() override; 22 | 23 | private: 24 | TaskHolder m_disassemblerTask; 25 | 26 | PerProvider m_imageLoadAddress; 27 | PerProvider m_imageBaseAddress; 28 | PerProvider m_range; 29 | PerProvider m_regionToDisassemble; 30 | 31 | PerProvider> m_currArchitecture; 32 | 33 | PerProvider> m_disassembly; 34 | 35 | void disassemble(); 36 | void exportToFile(); 37 | }; 38 | 39 | } 40 | -------------------------------------------------------------------------------- /plugins/fonts/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | include(ImHexPlugin) 4 | 5 | add_imhex_plugin( 6 | NAME 7 | fonts 8 | SOURCES 9 | source/library_fonts.cpp 10 | source/font_loader.cpp 11 | source/fonts.cpp 12 | source/font_settings.cpp 13 | INCLUDES 14 | include 15 | LIBRARY_PLUGIN 16 | ) 17 | -------------------------------------------------------------------------------- /plugins/fonts/include/fonts/blender_icons.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define ICON_MIN_BI 0xea00 4 | #define ICON_MAX_BI 0xea09 5 | #define ICON_BI_CUBE "\xee\xa8\x80" //< U+ea00 6 | #define ICON_BI_DATA_TRANSFER_BOTH "\xee\xa8\x81" //< U+ea01 7 | #define ICON_BI_EMPTY_ARROWS "\xee\xa8\x82" //< U+ea02 8 | #define ICON_BI_GRID "\xee\xa8\x83" //< U+ea03 9 | #define ICON_BI_MESH_GRID "\xee\xa8\x84" //< U+ea04 10 | #define ICON_BI_MOD_SOLIDIFY "\xee\xa8\x85" //< U+ea05 11 | #define ICON_BI_ORIENTATION_GLOBAL "\xee\xa8\x86" //< U+ea06 12 | #define ICON_BI_ORIENTATION_LOCAL "\xee\xa8\x87" //< U+ea07 13 | #define ICON_BI_VIEW_ORTHO "\xee\xa8\x88" //< U+ea08 14 | #define ICON_BI_VIEW_PERSPECTIVE "\xee\xa8\x89" //< U+ea09 15 | -------------------------------------------------------------------------------- /plugins/fonts/include/fonts/fonts.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace hex::fonts { 6 | 7 | const static auto Default = []{ return ImHexApi::Fonts::getFont("hex.fonts.font.default"); }; 8 | const static auto HexEditor = []{ return ImHexApi::Fonts::getFont("hex.fonts.font.hex_editor"); }; 9 | const static auto CodeEditor = []{ return ImHexApi::Fonts::getFont("hex.fonts.font.code_editor"); }; 10 | 11 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/fonts/JetBrainsMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/fonts/romfs/fonts/JetBrainsMono.ttf -------------------------------------------------------------------------------- /plugins/fonts/romfs/fonts/blendericons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/fonts/romfs/fonts/blendericons.ttf -------------------------------------------------------------------------------- /plugins/fonts/romfs/fonts/codicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/fonts/romfs/fonts/codicons.ttf -------------------------------------------------------------------------------- /plugins/fonts/romfs/fonts/unifont.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/fonts/romfs/fonts/unifont.otf -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/de_DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "de-DE", 3 | "country": "Germany", 4 | "fallback": false, 5 | "language": "German", 6 | "translations": { 7 | "hex.fonts.setting.font": "Schriftart", 8 | "hex.fonts.setting.font.custom_font": "Schriftart", 9 | "hex.fonts.setting.font.custom_font_info": "Die folgenden Einstellungen sind nur verfügbar wenn eine benutzerdefinierte Schriftart ausgewählt ist.", 10 | "hex.fonts.setting.font.font_antialias": "Schrift Anti-Aliasing", 11 | "hex.fonts.setting.font.font_bold": "Fett", 12 | "hex.fonts.setting.font.font_italic": "Kursiv", 13 | "hex.fonts.setting.font.font_path": "Schriftart", 14 | "hex.fonts.setting.font.font_size": "Schriftgrösse", 15 | "hex.fonts.setting.font.glyphs": "Glyphen", 16 | "hex.fonts.setting.font.load_all_unicode_chars": "Alle Unicode Zeichen laden" 17 | } 18 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/en_US.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "en-US", 3 | "language": "English", 4 | "country": "United States", 5 | "fallback": true, 6 | "translations": { 7 | "hex.fonts.setting.font": "Font", 8 | "hex.fonts.setting.font.glyphs": "Glyphs", 9 | "hex.fonts.setting.font.custom_font": "Font", 10 | "hex.fonts.setting.font.custom_font_info": "The following settings are only available when a custom font has been selected.", 11 | "hex.fonts.setting.font.font_bold": "Bold", 12 | "hex.fonts.setting.font.font_italic": "Italic", 13 | "hex.fonts.setting.font.font_antialias": "Antialiasing", 14 | "hex.fonts.setting.font.font_path": "Font", 15 | "hex.fonts.setting.font.font_size": "Font Size", 16 | "hex.fonts.setting.font.load_all_unicode_chars": "Load all unicode glyphs", 17 | "hex.fonts.font.default": "General UI Font", 18 | "hex.fonts.font.hex_editor": "Hex Editor Font", 19 | "hex.fonts.font.code_editor": "Code Editor Font", 20 | "hex.fonts.setting.font.antialias_none": "None", 21 | "hex.fonts.setting.font.antialias_grayscale": "Grayscale", 22 | "hex.fonts.setting.font.antialias_subpixel": "Subpixel" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/es_ES.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "es_ES", 3 | "country": "Spain", 4 | "fallback": false, 5 | "language": "Spanish", 6 | "translations": { 7 | "hex.fonts.setting.font": "Fuente", 8 | "hex.fonts.setting.font.custom_font": "", 9 | "hex.fonts.setting.font.font_antialias": "", 10 | "hex.fonts.setting.font.font_bold": "", 11 | "hex.fonts.setting.font.font_italic": "", 12 | "hex.fonts.setting.font.font_path": "Fuente", 13 | "hex.fonts.setting.font.font_size": "Tamaño de Fuente", 14 | "hex.fonts.setting.font.glyphs": "", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "Cargar todos los caracteres unicode" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/fr_FR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "fr-FR", 3 | "language": "Français", 4 | "country": "France", 5 | "fallback": false, 6 | "translations": { 7 | "hex.fonts.setting.font": "Police", 8 | "hex.fonts.setting.font.glyphs": "Glyphes", 9 | "hex.fonts.setting.font.custom_font": "Police personnalisée", 10 | "hex.fonts.setting.font.custom_font_info": "Les paramètres suivants ne sont disponibles que lorsqu'une police personnalisée est sélectionnée.", 11 | "hex.fonts.setting.font.font_bold": "Gras", 12 | "hex.fonts.setting.font.font_italic": "Italique", 13 | "hex.fonts.setting.font.font_antialias": "Anticrénelage", 14 | "hex.fonts.setting.font.font_path": "Police", 15 | "hex.fonts.setting.font.font_size": "Taille de la police", 16 | "hex.fonts.setting.font.load_all_unicode_chars": "Charger tous les glyphes Unicode", 17 | "hex.fonts.font.default": "Police générale de l'interface utilisateur", 18 | "hex.fonts.font.hex_editor": "Police de l'éditeur hexadécimal", 19 | "hex.fonts.font.code_editor": "Police de l'éditeur de code" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/hu_HU.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "hu_HU", 3 | "language": "Hungarian", 4 | "country": "Hungary", 5 | "fallback": false, 6 | "translations": { 7 | "hex.fonts.setting.font": "Betűtípus", 8 | "hex.fonts.setting.font.glyphs": "Szimbólumok", 9 | "hex.fonts.setting.font.custom_font": "Saját betűtípus", 10 | "hex.fonts.setting.font.font_bold": "Félkövér", 11 | "hex.fonts.setting.font.font_italic": "Dőlt", 12 | "hex.fonts.setting.font.font_antialias": "Élsimítás", 13 | "hex.fonts.setting.font.font_path": "Betűtípus", 14 | "hex.fonts.setting.font.font_size": "Betűméret", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "Minden Unicode karakter betöltése" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/it_IT.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "it-IT", 3 | "country": "Italy", 4 | "fallback": false, 5 | "language": "Italian", 6 | "translations": { 7 | "hex.fonts.setting.font": "", 8 | "hex.fonts.setting.font.custom_font": "", 9 | "hex.fonts.setting.font.font_antialias": "", 10 | "hex.fonts.setting.font.font_bold": "", 11 | "hex.fonts.setting.font.font_italic": "", 12 | "hex.fonts.setting.font.font_path": "", 13 | "hex.fonts.setting.font.font_size": "", 14 | "hex.fonts.setting.font.glyphs": "", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/ja_JP.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ja-JP", 3 | "country": "Japan", 4 | "fallback": false, 5 | "language": "Japanese", 6 | "translations": { 7 | "hex.fonts.setting.font": "フォント", 8 | "hex.fonts.setting.font.custom_font": "", 9 | "hex.fonts.setting.font.font_antialias": "", 10 | "hex.fonts.setting.font.font_bold": "", 11 | "hex.fonts.setting.font.font_italic": "", 12 | "hex.fonts.setting.font.font_path": "フォント", 13 | "hex.fonts.setting.font.font_size": "フォントサイズ", 14 | "hex.fonts.setting.font.glyphs": "", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/ko_KR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ko-KR", 3 | "country": "Korea", 4 | "fallback": false, 5 | "language": "Korean", 6 | "translations": { 7 | "hex.fonts.setting.font": "글꼴", 8 | "hex.fonts.setting.font.custom_font": "사용자 정의 글꼴", 9 | "hex.fonts.setting.font.font_antialias": "안티에일리어싱", 10 | "hex.fonts.setting.font.font_bold": "굵게", 11 | "hex.fonts.setting.font.font_italic": "기울임꼴", 12 | "hex.fonts.setting.font.font_path": "글꼴", 13 | "hex.fonts.setting.font.font_size": "글꼴 크기", 14 | "hex.fonts.setting.font.glyphs": "글리프", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "모든 유니코드 문자 불러오기" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/pt_BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "pt-BR", 3 | "country": "Brazil", 4 | "fallback": false, 5 | "language": "Portuguese", 6 | "translations": { 7 | "hex.fonts.setting.font": "Fonte", 8 | "hex.fonts.setting.font.custom_font": "", 9 | "hex.fonts.setting.font.font_antialias": "", 10 | "hex.fonts.setting.font.font_bold": "", 11 | "hex.fonts.setting.font.font_italic": "", 12 | "hex.fonts.setting.font.font_path": "Fonte", 13 | "hex.fonts.setting.font.font_size": "Tamanho da Fonte", 14 | "hex.fonts.setting.font.glyphs": "", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-CN", 3 | "country": "China", 4 | "fallback": false, 5 | "language": "Chinese (Simplified)", 6 | "translations": { 7 | "hex.fonts.setting.font": "字体", 8 | "hex.fonts.setting.font.custom_font": "自定义字体", 9 | "hex.fonts.setting.font.font_antialias": "抗锯齿", 10 | "hex.fonts.setting.font.font_bold": "粗体", 11 | "hex.fonts.setting.font.font_italic": "斜体", 12 | "hex.fonts.setting.font.font_path": "字体", 13 | "hex.fonts.setting.font.font_size": "字体大小", 14 | "hex.fonts.setting.font.glyphs": "字形", 15 | "hex.fonts.setting.font.load_all_unicode_chars": "加载所有 Unicode 字符" 16 | } 17 | } -------------------------------------------------------------------------------- /plugins/fonts/romfs/lang/zh_TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-TW", 3 | "country": "Taiwan", 4 | "fallback": false, 5 | "language": "Chinese (Traditional)", 6 | "translations": { 7 | "hex.fonts.setting.font": "字體", 8 | "hex.fonts.setting.font.custom_font": "", 9 | "hex.fonts.setting.font.custom_font_info": "", 10 | "hex.fonts.setting.font.font_antialias": "", 11 | "hex.fonts.setting.font.font_bold": "", 12 | "hex.fonts.setting.font.font_italic": "", 13 | "hex.fonts.setting.font.font_path": "字體", 14 | "hex.fonts.setting.font.font_size": "字體大小", 15 | "hex.fonts.setting.font.glyphs": "", 16 | "hex.fonts.setting.font.load_all_unicode_chars": "載入所有 unicode 字元" 17 | } 18 | } -------------------------------------------------------------------------------- /plugins/fonts/source/fonts.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | namespace hex::fonts { 11 | 12 | void registerFonts() { 13 | using namespace ImHexApi::Fonts; 14 | 15 | /** 16 | * !!IMPORTANT!! 17 | * Always load the font files in decreasing size of their glyphs. This will make the rasterize be more 18 | * efficient when packing the glyphs into the font atlas and therefor make the atlas much smaller. 19 | */ 20 | 21 | ImHexApi::Fonts::loadFont("Blender Icons", romfs::get("fonts/blendericons.ttf").span(),{ { ICON_MIN_BI, ICON_MAX_BI } }, { -1_scaled, -1_scaled }); 22 | 23 | ImHexApi::Fonts::loadFont("VS Codicons", romfs::get("fonts/codicons.ttf").span(), 24 | { 25 | { ICON_MIN_VS, ICON_MAX_VS } 26 | }, 27 | { -1_scaled, -1_scaled }); 28 | 29 | ImHexApi::Fonts::loadFont("Unifont", romfs::get("fonts/unifont.otf").span(), { }, {}, 0, false, 16); 30 | } 31 | 32 | } -------------------------------------------------------------------------------- /plugins/hashes/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | include(ImHexPlugin) 4 | 5 | add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/HashLibPlus ${CMAKE_CURRENT_BINARY_DIR}/HashLibPlus) 6 | enableUnityBuild(hashplus) 7 | 8 | add_imhex_plugin( 9 | NAME 10 | hashes 11 | SOURCES 12 | source/plugin_hashes.cpp 13 | 14 | source/content/hashes.cpp 15 | 16 | source/content/views/view_hashes.cpp 17 | INCLUDES 18 | include 19 | LIBRARIES 20 | fonts 21 | hashplus 22 | ) 23 | -------------------------------------------------------------------------------- /plugins/hashes/include/content/views/view_hashes.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace hex::plugin::hashes { 8 | 9 | class ViewHashes : public View::Window { 10 | public: 11 | explicit ViewHashes(); 12 | ~ViewHashes() override; 13 | 14 | void drawContent() override; 15 | 16 | private: 17 | bool importHashes(prv::Provider *provider, const nlohmann::json &json); 18 | bool exportHashes(prv::Provider *provider, nlohmann::json &json); 19 | 20 | private: 21 | ContentRegistry::Hashes::Hash *m_selectedHash = nullptr; 22 | std::string m_newHashName; 23 | 24 | PerProvider> m_hashFunctions; 25 | 26 | }; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /plugins/hashes/romfs/assets/achievements/fortune-cookie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/hashes/romfs/assets/achievements/fortune-cookie.png -------------------------------------------------------------------------------- /plugins/hashes/source/plugin_hashes.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #include 9 | 10 | #include 11 | 12 | namespace hex::plugin::hashes { 13 | 14 | void registerHashes(); 15 | 16 | } 17 | 18 | using namespace hex; 19 | using namespace hex::plugin::hashes; 20 | 21 | IMHEX_PLUGIN_SETUP("Hashes", "WerWolv", "Hashing algorithms") { 22 | hex::log::debug("Using romfs: '{}'", romfs::name()); 23 | for (auto &path : romfs::list("lang")) 24 | hex::ContentRegistry::Language::addLocalization(nlohmann::json::parse(romfs::get(path).string())); 25 | 26 | registerHashes(); 27 | ContentRegistry::Views::add(); 28 | 29 | AchievementManager::addAchievement("hex.builtin.achievement.misc", "hex.hashes.achievement.misc.create_hash.name") 30 | .setDescription("hex.hashes.achievement.misc.create_hash.desc") 31 | .setIcon(romfs::get("assets/achievements/fortune-cookie.png").span()) 32 | .addRequirement("hex.builtin.achievement.starting_out.open_file.name"); 33 | } 34 | -------------------------------------------------------------------------------- /plugins/script_loader/include/loaders/dotnet/dotnet_loader.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include 8 | 9 | namespace hex::script::loader { 10 | 11 | class DotNetLoader : public ScriptLoader { 12 | public: 13 | DotNetLoader() : ScriptLoader(".NET") {} 14 | ~DotNetLoader() override = default; 15 | 16 | bool initialize() override; 17 | bool loadAll() override; 18 | void clearScripts() override; 19 | 20 | private: 21 | std::function m_runMethod; 22 | std::function m_methodExists; 23 | std::fs::path::string_type m_assemblyLoaderPathString; 24 | }; 25 | 26 | } -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/de_DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "de-DE", 3 | "country": "Germany", 4 | "language": "German", 5 | "translations": { 6 | "hex.script_loader.menu.run_script": "Skript ausführen", 7 | "hex.script_loader.menu.loading": "Laden...", 8 | "hex.script_loader.menu.no_scripts": "Keine Skripte gefunden" 9 | } 10 | } -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/en_US.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "en-US", 3 | "country": "United States", 4 | "language": "English", 5 | "translations": { 6 | "hex.script_loader.menu.run_script": "Run Script...", 7 | "hex.script_loader.menu.loading": "Loading...", 8 | "hex.script_loader.menu.no_scripts": "No scripts found", 9 | "hex.script_loader.task.updating": "Updating scripts...", 10 | "hex.script_loader.task.running": "Running script..." 11 | } 12 | } -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/fr_FR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "fr-FR", 3 | "country": "France", 4 | "language": "Français", 5 | "translations": { 6 | "hex.script_loader.menu.run_script": "Exécuter le script...", 7 | "hex.script_loader.menu.loading": "Chargement...", 8 | "hex.script_loader.menu.no_scripts": "Aucun script trouvé", 9 | "hex.script_loader.task.updating": "Mise à jour des scripts...", 10 | "hex.script_loader.task.running": "Exécution du script..." 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/hu_HU.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "hu_HU", 3 | "language": "Hungarian", 4 | "country": "Hungary", 5 | "fallback": false, 6 | "translations": { 7 | "hex.script_loader.menu.run_script": "Script futtatása...", 8 | "hex.script_loader.menu.loading": "Betöltés...", 9 | "hex.script_loader.menu.no_scripts": "Nem található script" 10 | } 11 | } -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/ru_RU.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ru-RU", 3 | "country": "Russia", 4 | "language": "Russian", 5 | "translations": { 6 | "hex.script_loader.menu.run_script": "Запустить скрипт", 7 | "hex.script_loader.menu.loading": "Загрузка...", 8 | "hex.script_loader.menu.no_scripts": "Скрипты не найдены", 9 | "hex.script_loader.task.updating": "Обновление скриптов...", 10 | "hex.script_loader.task.running": "Запуск скрипта..." 11 | } 12 | } -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-CN", 3 | "country": "China", 4 | "language": "Chinese (Simplified)", 5 | "translations": { 6 | "hex.script_loader.menu.loading": "加载中……", 7 | "hex.script_loader.menu.no_scripts": "空空如也", 8 | "hex.script_loader.menu.run_script": "运行脚本……", 9 | "hex.script_loader.task.running": "运行脚本……", 10 | "hex.script_loader.task.updating": "更新脚本……" 11 | } 12 | } -------------------------------------------------------------------------------- /plugins/script_loader/romfs/lang/zh_TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-TW", 3 | "country": "Taiwan", 4 | "language": "Chinese (Traditional)", 5 | "translations": { 6 | "hex.script_loader.menu.loading": "正在載入...", 7 | "hex.script_loader.menu.no_scripts": "找不到指令碼", 8 | "hex.script_loader.menu.run_script": "執行指令碼..." 9 | } 10 | } -------------------------------------------------------------------------------- /plugins/script_loader/support/c/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(c_api) 2 | 3 | add_library(c_api OBJECT 4 | source/script_api/v1/bookmarks.cpp 5 | source/script_api/v1/logger.cpp 6 | source/script_api/v1/mem.cpp 7 | source/script_api/v1/ui.cpp 8 | ) 9 | 10 | target_include_directories(c_api PUBLIC 11 | include 12 | ) 13 | target_link_libraries(c_api PRIVATE libimhex ui) 14 | target_compile_definitions(c_api PRIVATE IMHEX_PROJECT_NAME="Script") -------------------------------------------------------------------------------- /plugins/script_loader/support/c/include/script_api.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define CONCAT_IMPL(x, y) x##y 4 | #define CONCAT(x, y) CONCAT_IMPL(x, y) 5 | 6 | #define SCRIPT_API_IMPL(VERSION, ReturnAndName, ...) extern "C" [[maybe_unused, gnu::visibility("default")]] CONCAT(ReturnAndName, VERSION) (__VA_ARGS__) 7 | #define SCRIPT_API(ReturnAndName, ...) SCRIPT_API_IMPL(VERSION, ReturnAndName, __VA_ARGS__) -------------------------------------------------------------------------------- /plugins/script_loader/support/c/source/script_api/v1/bookmarks.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | #define VERSION V1 6 | 7 | SCRIPT_API(void createBookmark, u64 address, u64 size, u32 color, const char *name, const char *description) { 8 | hex::ImHexApi::Bookmarks::add(address, size, name, description, color); 9 | } -------------------------------------------------------------------------------- /plugins/script_loader/support/c/source/script_api/v1/logger.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #define VERSION V1 7 | 8 | SCRIPT_API(void logPrint, const char *message) { 9 | hex::log::print("{}", message); 10 | } 11 | 12 | SCRIPT_API(void logPrintln, const char *message) { 13 | hex::log::println("{}", message); 14 | } 15 | 16 | SCRIPT_API(void logDebug, const char *message) { 17 | hex::log::debug("{}", message); 18 | } 19 | 20 | SCRIPT_API(void logInfo, const char *message) { 21 | hex::log::info("{}", message); 22 | } 23 | 24 | SCRIPT_API(void logWarn, const char *message) { 25 | hex::log::warn("{}", message); 26 | } 27 | 28 | SCRIPT_API(void logError, const char *message) { 29 | hex::log::error("{}", message); 30 | } 31 | 32 | SCRIPT_API(void logFatal, const char *message) { 33 | hex::log::fatal("{}", message); 34 | } -------------------------------------------------------------------------------- /plugins/script_loader/support/dotnet/AssemblyLoader/.gitignore: -------------------------------------------------------------------------------- 1 | .vs/ 2 | bin/ 3 | obj/ 4 | *.dll 5 | *.pdb 6 | *.json -------------------------------------------------------------------------------- /plugins/script_loader/support/dotnet/AssemblyLoader/AssemblyLoader.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Library 5 | net8.0 6 | enable 7 | enable 8 | AssemblyLoader 9 | True 10 | true 11 | 12 | 13 | 14 | true 15 | 16 | 17 | 18 | Major 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /plugins/script_loader/support/dotnet/AssemblyLoader/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\net8.0\publish\ 10 | FileSystem 11 | <_TargetId>Folder 12 | 13 | -------------------------------------------------------------------------------- /plugins/script_loader/support/dotnet/AssemblyLoader/Properties/PublishProfiles/FolderProfile.pubxml.user: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | True|2023-06-16T15:24:52.9876162Z; 8 | 9 | 10 | -------------------------------------------------------------------------------- /plugins/script_loader/support/dotnet/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dotnet_assemblies) 2 | 3 | function(add_dotnet_assembly name) 4 | set(OUTPUT_DLL ${CMAKE_CURRENT_BINARY_DIR}/../../${name}.dll) 5 | set(OUTPUT_RUNTIMECONFIG ${CMAKE_CURRENT_BINARY_DIR}/../../${name}.runtimeconfig.json) 6 | 7 | file(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/${name}/*.cs) 8 | add_custom_command( 9 | OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../../${name}.dll 10 | COMMAND ${DOTNET_EXECUTABLE} build ${CMAKE_CURRENT_SOURCE_DIR}/${name}/${name}.csproj -nologo -consoleLoggerParameters:NoSummary -verbosity:quiet -c Release -o ${CMAKE_CURRENT_BINARY_DIR}/../.. 11 | DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${name}/${name}.csproj ${sources} 12 | COMMENT "Building ${name}.dll" 13 | ) 14 | 15 | add_custom_target(${name} ALL DEPENDS ${OUTPUT_DLL}) 16 | 17 | install(FILES 18 | ${OUTPUT_DLL} 19 | ${OUTPUT_RUNTIMECONFIG} 20 | DESTINATION 21 | ${PLUGINS_INSTALL_LOCATION} 22 | ) 23 | endfunction() 24 | 25 | add_dotnet_assembly(AssemblyLoader) -------------------------------------------------------------------------------- /plugins/script_loader/templates/CSharp/.gitignore: -------------------------------------------------------------------------------- 1 | .vs/ 2 | */bin/ 3 | */obj/ -------------------------------------------------------------------------------- /plugins/script_loader/templates/CSharp/ImHexLibrary/Bookmarks.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Runtime.InteropServices; 3 | using System.Text; 4 | 5 | namespace ImHex 6 | { 7 | public partial class Bookmarks 8 | { 9 | [LibraryImport("ImHex")] 10 | private static partial void createBookmarkV1(UInt64 address, UInt64 size, UInt32 color, byte[] name, byte[] description); 11 | 12 | public static void CreateBookmark(long address, long size, Color color, string name = "", string description = "") 13 | { 14 | createBookmarkV1((UInt64)address, (UInt64)size, (UInt32)(0xA0 << 24 | color.B << 16 | color.G << 8 | color.R), Encoding.UTF8.GetBytes(name), Encoding.UTF8.GetBytes(description)); 15 | } 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /plugins/script_loader/templates/CSharp/ImHexLibrary/ImHexLibrary.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net7.0 5 | enable 6 | enable 7 | True 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /plugins/script_loader/templates/CSharp/ImHexLibrary/Library.cs: -------------------------------------------------------------------------------- 1 | using ImHex; 2 | 3 | public static class Library 4 | { 5 | public static void Initialize() 6 | { 7 | Logger.RedirectConsole(); 8 | } 9 | } 10 | 11 | public interface IScript 12 | { 13 | } -------------------------------------------------------------------------------- /plugins/script_loader/templates/CSharp/ImHexScript/ImHexScript.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Library 5 | net7.0 6 | enable 7 | enable 8 | Main 9 | False 10 | true 11 | 12 | 13 | 14 | true 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /plugins/script_loader/templates/CSharp/ImHexScript/Program.cs: -------------------------------------------------------------------------------- 1 | using ImHex; 2 | using ImGuiNET; 3 | 4 | class Script : IScript { 5 | 6 | public static int OnLoad() 7 | { 8 | // This function is executed the first time the Plugin is loaded 9 | 10 | return 1; 11 | } 12 | 13 | public static int Main() 14 | { 15 | // This function is executed when the plugin is selected in the "Run Script..." menu 16 | 17 | return 1; 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /plugins/ui/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | include(ImHexPlugin) 4 | 5 | add_imhex_plugin( 6 | NAME 7 | ui 8 | SOURCES 9 | source/library_ui.cpp 10 | 11 | source/ui/hex_editor.cpp 12 | source/ui/pattern_drawer.cpp 13 | source/ui/visualizer_drawer.cpp 14 | source/ui/menu_items.cpp 15 | INCLUDES 16 | include 17 | LIBRARIES 18 | fonts 19 | LIBRARY_PLUGIN 20 | ) -------------------------------------------------------------------------------- /plugins/ui/include/banners/banner_icon.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace hex::ui { 7 | 8 | class BannerIcon : public Banner { 9 | public: 10 | BannerIcon(const char *icon, UnlocalizedString message, ImColor color) 11 | : Banner(color), m_icon(icon), m_message(std::move(message)) { } 12 | 13 | void drawContent() override { 14 | auto textHeight = std::max(ImGui::CalcTextSize(Lang(m_message)).y, ImGui::CalcTextSize(m_icon).y); 15 | auto textOffset = (ImGui::GetWindowHeight() - textHeight) / 2; 16 | ImGui::SetCursorPosY(ImGui::GetCursorPosY() + textOffset); 17 | ImGui::TextUnformatted(m_icon); 18 | ImGui::SameLine(0, 10_scaled); 19 | ImGui::TextUnformatted(Lang(m_message)); 20 | } 21 | 22 | private: 23 | const char *m_icon; 24 | UnlocalizedString m_message; 25 | }; 26 | 27 | } -------------------------------------------------------------------------------- /plugins/ui/include/ui/visualizer_drawer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include "hex/api/content_registry.hpp" 6 | 7 | namespace hex::ui { 8 | 9 | class VisualizerDrawer { 10 | std::string m_lastVisualizerError; 11 | public: 12 | VisualizerDrawer()=default; 13 | void drawVisualizer(const std::map &visualizers, const std::vector &arguments, pl::ptrn::Pattern &pattern, bool reset); 14 | const std::string& getLastVisualizerError() const { 15 | return m_lastVisualizerError; 16 | } 17 | void setLastVisualizerError(const std::string &error) { 18 | m_lastVisualizerError = error; 19 | } 20 | void clearLastVisualizerError() { 21 | m_lastVisualizerError.clear(); 22 | } 23 | }; 24 | } -------------------------------------------------------------------------------- /plugins/ui/source/library_ui.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | IMHEX_LIBRARY_SETUP("UI") { 13 | hex::log::debug("Using romfs: '{}'", romfs::name()); 14 | for (auto &path : romfs::list("lang")) 15 | hex::ContentRegistry::Language::addLocalization(nlohmann::json::parse(romfs::get(path).string())); 16 | } -------------------------------------------------------------------------------- /plugins/visualizers/include/content/visualizer_helpers.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace hex::plugin::visualizers { 7 | 8 | template 9 | std::vector patternToArray(pl::ptrn::Pattern *pattern){ 10 | const auto bytes = pattern->getBytes(); 11 | 12 | std::vector result; 13 | result.resize(bytes.size() / sizeof(T)); 14 | for (size_t i = 0; i < result.size(); i++) 15 | std::memcpy(&result[i], &bytes[i * sizeof(T)], sizeof(T)); 16 | 17 | return result; 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/assets/common/map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/plugins/visualizers/romfs/assets/common/map.jpg -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/de_DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "de-DE", 3 | "country": "Germany", 4 | "fallback": false, 5 | "language": "German", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "Umgebungslicht", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "Diffuses Licht", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "Lichtfarbe", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "Lichtposition", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "Mehr Einstellungen", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "Objektreflexion", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "Spiegelndes Licht", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "Texturdatei", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "Breitengrade", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "Längengrad", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "Adresse finden", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "Adresse abfragen...", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "Keine Adresse gefunden" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/es_ES.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "es_ES", 3 | "country": "Spain", 4 | "fallback": false, 5 | "language": "Spanish", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/hu_HU.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "hu_HU", 3 | "language": "Hungarian", 4 | "country": "Hungary", 5 | "fallback": false, 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.light_position": "Fény pozició", 8 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "Környezeti fényerő", 9 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "Szórt fényerő", 10 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "Tükröződő fényerő", 11 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "Tárgyak fényvisszaverése", 12 | "hex.visualizers.pl_visualizer.3d.light_color": "Fény színe", 13 | "hex.visualizers.pl_visualizer.3d.more_settings": "További beállítások", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "Textúra fájl helye", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "Szélesség", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "Hosszúság", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "Cím keresése", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "Cím lekérdezése...", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "Nem található cím" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/it_IT.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "it-IT", 3 | "country": "Italy", 4 | "fallback": false, 5 | "language": "Italian", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/ja_JP.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ja-JP", 3 | "country": "Japan", 4 | "fallback": false, 5 | "language": "Japanese", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/ko_KR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ko-KR", 3 | "country": "Korea", 4 | "fallback": false, 5 | "language": "Korean", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "주변 밝기", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "확산 밝기", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "조명 색상", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "조명 위치", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "설정 더 보기", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "개체 반사도", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "반사 밝기", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "텍스처 파일 경로", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "위도", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "경도", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "주소 찾기", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "주소 쿼리 중...", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "찾은 주소가 없습니다" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/pt_BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "pt-BR", 3 | "country": "Brazil", 4 | "fallback": false, 5 | "language": "Portuguese", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-CN", 3 | "country": "China", 4 | "fallback": false, 5 | "language": "Chinese (Simplified)", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "环境亮度", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "漫射亮度", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "光线颜色", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "光线位置", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "更多设置", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "物体反射率", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "镜面亮度", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "纹理文件路径", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "维度", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "精度", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "查找地址", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "正在查找地址……", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "找不到地址", 20 | "hex.visualizers.pl_visualizer.task.visualizing": "可视化数据……" 21 | } 22 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/lang/zh_TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-TW", 3 | "country": "Taiwan", 4 | "fallback": false, 5 | "language": "Chinese (Traditional)", 6 | "translations": { 7 | "hex.visualizers.pl_visualizer.3d.ambient_brightness": "", 8 | "hex.visualizers.pl_visualizer.3d.diffuse_brightness": "", 9 | "hex.visualizers.pl_visualizer.3d.light_color": "", 10 | "hex.visualizers.pl_visualizer.3d.light_position": "", 11 | "hex.visualizers.pl_visualizer.3d.more_settings": "", 12 | "hex.visualizers.pl_visualizer.3d.object_reflectiveness": "", 13 | "hex.visualizers.pl_visualizer.3d.specular_brightness": "", 14 | "hex.visualizers.pl_visualizer.3d.texture_file": "", 15 | "hex.visualizers.pl_visualizer.coordinates.latitude": "緯度", 16 | "hex.visualizers.pl_visualizer.coordinates.longitude": "經度", 17 | "hex.visualizers.pl_visualizer.coordinates.query": "查詢地址", 18 | "hex.visualizers.pl_visualizer.coordinates.querying": "正在查詢地址...", 19 | "hex.visualizers.pl_visualizer.coordinates.querying_no_address": "找不到地址" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/visualizers/romfs/shaders/default/lightFragment.glsl: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | in VertexData { 4 | vec3 normal; 5 | vec4 color; 6 | vec3 fragPosition; 7 | } vertexData; 8 | 9 | out vec4 outColor; 10 | 11 | void main() { 12 | 13 | vec3 nLight = normalize(-vertexData.fragPosition); 14 | vec3 nNormal = normalize(vertexData.normal); 15 | 16 | float dotLN = dot(nLight, nNormal); 17 | 18 | float diffuse = dotLN * 0.5; 19 | 20 | vec3 color = (diffuse+0.7)*vertexData.color.xyz; 21 | outColor = vec4(color, 1.0F); 22 | } 23 | -------------------------------------------------------------------------------- /plugins/visualizers/romfs/shaders/default/lightVertex.glsl: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | uniform mat4 modelMatrix; 4 | uniform mat4 viewMatrix; 5 | uniform mat4 projectionMatrix; 6 | 7 | layout (location = 0) in vec3 in_Position; 8 | layout (location = 1) in vec3 in_Normal; 9 | layout (location = 2) in vec4 in_Color; 10 | 11 | 12 | 13 | out VertexData { 14 | vec3 normal; 15 | vec4 color; 16 | vec3 fragPosition; 17 | } vertexData; 18 | 19 | 20 | void main() { 21 | vertexData.normal = (modelMatrix * vec4(in_Normal,0)).xyz; 22 | //vertexData.normal = mat3(transpose(inverse(modelMatrix))) * in_Normal; 23 | //vertexData.fragPosition = (viewMatrix * modelMatrix * vec4(in_Position, 1.0)).xyz; 24 | vertexData.fragPosition = (modelMatrix * vec4(in_Position, 1.0)).xyz; 25 | gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0); 26 | vertexData.color = in_Color; 27 | } 28 | -------------------------------------------------------------------------------- /plugins/visualizers/romfs/shaders/default/lineFragment.glsl: -------------------------------------------------------------------------------- 1 | #version 330 core 2 | 3 | in vec4 fragColor; 4 | out vec4 outColor; 5 | 6 | void main() { 7 | outColor = fragColor; 8 | } 9 | -------------------------------------------------------------------------------- /plugins/visualizers/romfs/shaders/default/lineVertex.glsl: -------------------------------------------------------------------------------- 1 | #version 330 core 2 | 3 | layout (location = 0) in vec3 in_Position; 4 | layout (location = 1) in vec4 in_Color; 5 | 6 | uniform mat4 modelMatrix; 7 | uniform mat4 viewMatrix; 8 | uniform mat4 projectionMatrix; 9 | 10 | out vec4 fragColor; 11 | 12 | void main() { 13 | gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0); 14 | fragColor = in_Color; 15 | } 16 | -------------------------------------------------------------------------------- /plugins/visualizers/source/content/pl_visualizers/line_plot.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | namespace hex::plugin::visualizers { 11 | 12 | void drawLinePlotVisualizer(pl::ptrn::Pattern &, bool shouldReset, std::span arguments) { 13 | static std::vector values; 14 | auto dataPattern = arguments[0].toPattern(); 15 | 16 | if (ImPlot::BeginPlot("##plot", ImVec2(400, 250), ImPlotFlags_CanvasOnly)) { 17 | ImPlot::SetupAxes("X", "Y", ImPlotAxisFlags_AutoFit, ImPlotAxisFlags_AutoFit); 18 | 19 | if (shouldReset) { 20 | values.clear(); 21 | values = sampleData(patternToArray(dataPattern.get()), ImPlot::GetPlotSize().x * 4); 22 | } 23 | 24 | ImPlot::PlotLine("##line", values.data(), values.size()); 25 | 26 | ImPlot::EndPlot(); 27 | } 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /plugins/visualizers/source/plugin_visualizers.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace hex::plugin::visualizers { 9 | 10 | void registerPatternLanguageVisualizers(); 11 | void registerPatternLanguageInlineVisualizers(); 12 | 13 | } 14 | 15 | using namespace hex; 16 | using namespace hex::plugin::visualizers; 17 | 18 | IMHEX_PLUGIN_SETUP("Visualizers", "WerWolv", "Visualizers for the Pattern Language") { 19 | hex::log::debug("Using romfs: '{}'", romfs::name()); 20 | for (auto &path : romfs::list("lang")) 21 | hex::ContentRegistry::Language::addLocalization(nlohmann::json::parse(romfs::get(path).string())); 22 | 23 | registerPatternLanguageVisualizers(); 24 | registerPatternLanguageInlineVisualizers(); 25 | } 26 | -------------------------------------------------------------------------------- /plugins/windows/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | if (WIN32) 4 | 5 | include(ImHexPlugin) 6 | add_imhex_plugin( 7 | NAME 8 | windows 9 | SOURCES 10 | source/plugin_windows.cpp 11 | 12 | source/views/view_tty_console.cpp 13 | 14 | source/content/ui_items.cpp 15 | source/content/settings_entries.cpp 16 | INCLUDES 17 | include 18 | LIBRARIES 19 | ui 20 | fonts 21 | ${JTHREAD_LIBRARIES} 22 | ) 23 | 24 | endif () 25 | -------------------------------------------------------------------------------- /plugins/yara_rules/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | include(ImHexPlugin) 4 | 5 | if (NOT USE_SYSTEM_YARA) 6 | add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/yara ${CMAKE_CURRENT_BINARY_DIR}/yara EXCLUDE_FROM_ALL) 7 | set(YARA_LIBRARIES libyara) 8 | if (MSVC) 9 | target_compile_options(capstone PRIVATE /wd4005) 10 | endif () 11 | else() 12 | find_package(Yara REQUIRED) 13 | endif() 14 | 15 | add_imhex_plugin( 16 | NAME 17 | yara_rules 18 | SOURCES 19 | source/plugin_yara.cpp 20 | 21 | source/content/yara_rule.cpp 22 | source/content/data_information_sections.cpp 23 | source/content/views/view_yara.cpp 24 | INCLUDES 25 | include 26 | ${YARA_INCLUDE_DIRS} 27 | LIBRARIES 28 | ui 29 | fonts 30 | ${JTHREAD_LIBRARIES} 31 | ${YARA_LIBRARIES} 32 | ) 33 | -------------------------------------------------------------------------------- /plugins/yara_rules/include/content/views/view_yara.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | #include 8 | 9 | #include 10 | #include 11 | 12 | namespace hex::plugin::yara { 13 | 14 | class ViewYara : public View::Window { 15 | public: 16 | ViewYara(); 17 | ~ViewYara() override; 18 | 19 | void drawContent() override; 20 | 21 | private: 22 | PerProvider>> m_rulePaths; 23 | PerProvider> m_matchedRules; 24 | PerProvider> m_consoleMessages; 25 | PerProvider m_selectedRule; 26 | PerProvider> m_highlights; 27 | 28 | TaskHolder m_matcherTask; 29 | 30 | void applyRules(); 31 | void clearResult(); 32 | }; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/en_US.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "en-US", 3 | "language": "English", 4 | "country": "United States", 5 | "fallback": true, 6 | "translations": { 7 | "hex.yara.information_section.advanced_data_info": "Advanced Data Information", 8 | "hex.yara.information_section.advanced_data_info.no_information": "No further information found", 9 | "hex.yara_rules.view.yara.error": "Yara Compiler error: {0}", 10 | "hex.yara_rules.view.yara.header.matches": "Matches", 11 | "hex.yara_rules.view.yara.header.rules": "Rules", 12 | "hex.yara_rules.view.yara.match": "Match Rules", 13 | "hex.yara_rules.view.yara.matches.identifier": "Identifier", 14 | "hex.yara_rules.view.yara.matches.variable": "Variable", 15 | "hex.yara_rules.view.yara.matching": "Matching...", 16 | "hex.yara_rules.view.yara.name": "Yara Rules", 17 | "hex.yara_rules.view.yara.no_rules": "No YARA rules found. Put them in ImHex's 'yara' folder", 18 | "hex.yara_rules.view.yara.reload": "Reload", 19 | "hex.yara_rules.view.yara.reset": "Reset", 20 | "hex.yara_rules.view.yara.rule_added": "Yara rule added!", 21 | "hex.yara_rules.view.yara.whole_data": "Whole file matches!" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/es_ES.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "es_ES", 3 | "country": "Spain", 4 | "fallback": false, 5 | "language": "Spanish", 6 | "translations": { 7 | "hex.yara_rules.view.yara.error": "Error del compilador de Yara: ", 8 | "hex.yara_rules.view.yara.header.matches": "Coincidenciasç", 9 | "hex.yara_rules.view.yara.header.rules": "Rules", 10 | "hex.yara_rules.view.yara.match": "Reglas de Coincidencia", 11 | "hex.yara_rules.view.yara.matches.identifier": "Identificador", 12 | "hex.yara_rules.view.yara.matches.variable": "", 13 | "hex.yara_rules.view.yara.matching": "Analizando coincidencias...", 14 | "hex.yara_rules.view.yara.name": "Yara Rules", 15 | "hex.yara_rules.view.yara.no_rules": "No se encontraron Yara Rules. Estas han de encontrarse en la carpeta 'yara' de ImHex.", 16 | "hex.yara_rules.view.yara.reload": "Recargar", 17 | "hex.yara_rules.view.yara.reset": "Restablecer", 18 | "hex.yara_rules.view.yara.rule_added": "¡La Yara Rule fue añadida con éxito!", 19 | "hex.yara_rules.view.yara.whole_data": "¡El archivo completo coincide!" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/it_IT.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "it-IT", 3 | "country": "Italy", 4 | "fallback": false, 5 | "language": "Italian", 6 | "translations": { 7 | "hex.yara_rules.view.yara.error": "Errore compilazione Yara: {0}", 8 | "hex.yara_rules.view.yara.header.matches": "Abbinamenti", 9 | "hex.yara_rules.view.yara.header.rules": "Regola", 10 | "hex.yara_rules.view.yara.match": "Abbina Regole", 11 | "hex.yara_rules.view.yara.matches.identifier": "Identificatore", 12 | "hex.yara_rules.view.yara.matches.variable": "Variabile", 13 | "hex.yara_rules.view.yara.matching": "Abbinamento...", 14 | "hex.yara_rules.view.yara.name": "Regole di Yara", 15 | "hex.yara_rules.view.yara.no_rules": "Nessuna regola di YARA. Aggiungile in nella cartella 'yara' di 'ImHex'", 16 | "hex.yara_rules.view.yara.reload": "Ricarica", 17 | "hex.yara_rules.view.yara.reset": "", 18 | "hex.yara_rules.view.yara.rule_added": "Regola di Yara aggiunta!", 19 | "hex.yara_rules.view.yara.whole_data": "Tutti i file combaciano!" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/ja_JP.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ja-JP", 3 | "country": "Japan", 4 | "fallback": false, 5 | "language": "Japanese", 6 | "translations": { 7 | "hex.yara_rules.view.yara.error": "Yaraコンパイルエラー: {0}", 8 | "hex.yara_rules.view.yara.header.matches": "マッチ結果", 9 | "hex.yara_rules.view.yara.header.rules": "ルール", 10 | "hex.yara_rules.view.yara.match": "検出", 11 | "hex.yara_rules.view.yara.matches.identifier": "識別子", 12 | "hex.yara_rules.view.yara.matches.variable": "変数", 13 | "hex.yara_rules.view.yara.matching": "マッチ中…", 14 | "hex.yara_rules.view.yara.name": "Yaraルール", 15 | "hex.yara_rules.view.yara.no_rules": "YARAルールが見つかりませんでした。ImHexの'yara'フォルダ内に入れてください", 16 | "hex.yara_rules.view.yara.reload": "リロード", 17 | "hex.yara_rules.view.yara.reset": "", 18 | "hex.yara_rules.view.yara.rule_added": "Yaraルールが追加されました。", 19 | "hex.yara_rules.view.yara.whole_data": "ファイル全体が一致します。" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/ko_KR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ko-KR", 3 | "country": "Korea", 4 | "fallback": false, 5 | "language": "Korean", 6 | "translations": { 7 | "hex.yara_rules.view.yara.error": "Yara 컴파일러 오류: {0}", 8 | "hex.yara_rules.view.yara.header.matches": "일치", 9 | "hex.yara_rules.view.yara.header.rules": "규칙", 10 | "hex.yara_rules.view.yara.match": "규칙 일치 찾기", 11 | "hex.yara_rules.view.yara.matches.identifier": "식별자", 12 | "hex.yara_rules.view.yara.matches.variable": "변수", 13 | "hex.yara_rules.view.yara.matching": "검색 중...", 14 | "hex.yara_rules.view.yara.name": "Yara 규칙", 15 | "hex.yara_rules.view.yara.no_rules": "Yara 규칙이 없습니다. ImHex의 'yara' 폴더에 Yara 규칙을 넣으세요", 16 | "hex.yara_rules.view.yara.reload": "새로 고침", 17 | "hex.yara_rules.view.yara.reset": "재설정", 18 | "hex.yara_rules.view.yara.rule_added": "Yara 규칙 추가됨!", 19 | "hex.yara_rules.view.yara.whole_data": "모든 파일을 검색했습니다!" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/pt_BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "pt-BR", 3 | "country": "Brazil", 4 | "fallback": false, 5 | "language": "Portuguese", 6 | "translations": { 7 | "hex.yara_rules.view.yara.error": "Erro do compilador Yara: {0}", 8 | "hex.yara_rules.view.yara.header.matches": "Combinações", 9 | "hex.yara_rules.view.yara.header.rules": "Regras", 10 | "hex.yara_rules.view.yara.match": "Combinar Regras", 11 | "hex.yara_rules.view.yara.matches.identifier": "Identificador", 12 | "hex.yara_rules.view.yara.matches.variable": "Variável", 13 | "hex.yara_rules.view.yara.matching": "Combinando...", 14 | "hex.yara_rules.view.yara.name": "Regras Yara", 15 | "hex.yara_rules.view.yara.no_rules": "Nenhuma regra YARA encontrada. Coloque-os na pasta 'yara' do ImHex", 16 | "hex.yara_rules.view.yara.reload": "Recarregar", 17 | "hex.yara_rules.view.yara.reset": "", 18 | "hex.yara_rules.view.yara.rule_added": "Regra Yara Adicionada!", 19 | "hex.yara_rules.view.yara.whole_data": "O arquivo inteiro corresponde!" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-CN", 3 | "country": "China", 4 | "fallback": false, 5 | "language": "Chinese (Simplified)", 6 | "translations": { 7 | "hex.yara.information_section.advanced_data_info": "高级数据信息", 8 | "hex.yara.information_section.advanced_data_info.no_information": "没有找到更多信息", 9 | "hex.yara_rules.view.yara.error": "Yara 编译器错误: {0}", 10 | "hex.yara_rules.view.yara.header.matches": "匹配", 11 | "hex.yara_rules.view.yara.header.rules": "规则", 12 | "hex.yara_rules.view.yara.match": "匹配规则", 13 | "hex.yara_rules.view.yara.matches.identifier": "标识符", 14 | "hex.yara_rules.view.yara.matches.variable": "变量", 15 | "hex.yara_rules.view.yara.matching": "匹配中……", 16 | "hex.yara_rules.view.yara.name": "Yara 规则", 17 | "hex.yara_rules.view.yara.no_rules": "没有找到 Yara 规则。请将规则放到 ImHex 的 'yara' 目录下。", 18 | "hex.yara_rules.view.yara.reload": "重新加载", 19 | "hex.yara_rules.view.yara.reset": "重置", 20 | "hex.yara_rules.view.yara.rule_added": "Yara 规则已添加!", 21 | "hex.yara_rules.view.yara.whole_data": "全文件匹配!" 22 | } 23 | } -------------------------------------------------------------------------------- /plugins/yara_rules/romfs/lang/zh_TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "zh-TW", 3 | "country": "Taiwan", 4 | "fallback": false, 5 | "language": "Chinese (Traditional)", 6 | "translations": { 7 | "hex.yara_rules.view.yara.error": "Yara 編譯器錯誤:", 8 | "hex.yara_rules.view.yara.header.matches": "Matches", 9 | "hex.yara_rules.view.yara.header.rules": "規則", 10 | "hex.yara_rules.view.yara.match": "Match Rules", 11 | "hex.yara_rules.view.yara.matches.identifier": "識別碼", 12 | "hex.yara_rules.view.yara.matches.variable": "變數", 13 | "hex.yara_rules.view.yara.matching": "Matching...", 14 | "hex.yara_rules.view.yara.name": "Yara 規則", 15 | "hex.yara_rules.view.yara.no_rules": "找不到 YARA 規則。請放進 ImHex 的 'yara' 資料夾中", 16 | "hex.yara_rules.view.yara.reload": "重新載入", 17 | "hex.yara_rules.view.yara.reset": "重設", 18 | "hex.yara_rules.view.yara.rule_added": " Yara 規則已新增!", 19 | "hex.yara_rules.view.yara.whole_data": "Whole file matches!" 20 | } 21 | } -------------------------------------------------------------------------------- /plugins/yara_rules/source/plugin_yara.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | #include "content/views/view_yara.hpp" 9 | 10 | using namespace hex; 11 | using namespace hex::plugin::yara; 12 | 13 | namespace hex::plugin::yara { 14 | 15 | void registerDataInformationSections(); 16 | void registerViews() { 17 | ContentRegistry::Views::add(); 18 | } 19 | 20 | } 21 | 22 | IMHEX_PLUGIN_SETUP("Yara Rules", "WerWolv", "Support for matching Yara rules") { 23 | hex::log::debug("Using romfs: '{}'", romfs::name()); 24 | for (auto &path : romfs::list("lang")) 25 | hex::ContentRegistry::Language::addLocalization(nlohmann::json::parse(romfs::get(path).string())); 26 | 27 | registerViews(); 28 | registerDataInformationSections(); 29 | } 30 | -------------------------------------------------------------------------------- /resources/dist/common/get_nightly_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/common/get_nightly_banner.png -------------------------------------------------------------------------------- /resources/dist/common/get_release_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/common/get_release_banner.png -------------------------------------------------------------------------------- /resources/dist/common/read_docs_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/common/read_docs_banner.png -------------------------------------------------------------------------------- /resources/dist/common/try_online_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/common/try_online_banner.png -------------------------------------------------------------------------------- /resources/dist/macos/AppIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/macos/AppIcon.icns -------------------------------------------------------------------------------- /resources/dist/macos/Entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.apple.security.cs.debugger 5 | 6 | 7 | -------------------------------------------------------------------------------- /resources/dist/windows/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/windows/icon.ico -------------------------------------------------------------------------------- /resources/dist/windows/imhex.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | true 6 | PerMonitorV2 7 | detached 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /resources/dist/windows/wix_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/windows/wix_banner.png -------------------------------------------------------------------------------- /resources/dist/windows/wix_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/dist/windows/wix_dialog.png -------------------------------------------------------------------------------- /resources/projects/dmg_background.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/dmg_background.xcf -------------------------------------------------------------------------------- /resources/projects/icon.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/icon.xcf -------------------------------------------------------------------------------- /resources/projects/imhex_logo.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/imhex_logo.afdesign -------------------------------------------------------------------------------- /resources/projects/ms_banner.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/ms_banner.xcf -------------------------------------------------------------------------------- /resources/projects/readme_banners.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/readme_banners.xcf -------------------------------------------------------------------------------- /resources/projects/splash_wasm.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/splash_wasm.xcf -------------------------------------------------------------------------------- /resources/projects/wix_banner.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/wix_banner.xcf -------------------------------------------------------------------------------- /resources/projects/wix_dialog.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WerWolv/ImHex/58228e0af4957229e74b554790d8cad4d032da95/resources/projects/wix_dialog.xcf -------------------------------------------------------------------------------- /resources/resource.rc: -------------------------------------------------------------------------------- 1 | #pragma code_page(65001) 2 | 3 | GLFW_ICON ICON dist/windows/icon.ico 4 | IDI_ICON1 ICON dist/windows/icon.ico 5 | 1 24 "dist/windows/imhex.manifest" 6 | 7 | 1 VERSIONINFO 8 | FILEVERSION PROJECT_VERSION_MAJOR,PROJECT_VERSION_MINOR,PROJECT_VERSION_PATCH 9 | PRODUCTVERSION PROJECT_VERSION_MAJOR,PROJECT_VERSION_MINOR,PROJECT_VERSION_PATCH 10 | FILEFLAGSMASK 0x17L 11 | #ifdef _DEBUG 12 | FILEFLAGS 0x01L 13 | #else 14 | FILEFLAGS 0x00L 15 | #endif 16 | FILEOS 0x04L 17 | FILETYPE 0x01L 18 | FILESUBTYPE 0x00L 19 | BEGIN 20 | BLOCK "StringFileInfo" 21 | BEGIN 22 | BLOCK "080904b0" 23 | BEGIN 24 | VALUE "CompanyName", "WerWolv" 25 | VALUE "FileDescription", "ImHex" 26 | VALUE "LegalCopyright", "WerWolv 2020-2025" 27 | VALUE "OriginalFilename", "imhex.exe" 28 | VALUE "ProductName", "ImHex" 29 | END 30 | END 31 | BLOCK "VarFileInfo" 32 | BEGIN 33 | VALUE "Translation", 0x809, 1200 34 | END 35 | END -------------------------------------------------------------------------------- /tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(unit_tests) 2 | 3 | add_subdirectory(common) 4 | target_compile_definitions(tests_common PUBLIC IMHEX_PROJECT_NAME="${PROJECT_NAME}") 5 | 6 | add_subdirectory(helpers) 7 | add_subdirectory(algorithms) 8 | add_subdirectory(plugins) -------------------------------------------------------------------------------- /tests/algorithms/source/endian.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | TEST_SEQUENCE("32BitIntegerEndianSwap") { 6 | TEST_ASSERT(hex::changeEndianness(0xAABBCCDD, std::endian::big) == 0xDDCCBBAA); 7 | 8 | TEST_SUCCESS(); 9 | }; 10 | 11 | TEST_SEQUENCE("64BitFloatEndianSwap") { 12 | double floatValue = 1234.5; 13 | u64 integerValue = reinterpret_cast(floatValue); 14 | 15 | double swappedFloatValue = hex::changeEndianness(floatValue, std::endian::big); 16 | u64 swappedIntegerValue = hex::changeEndianness(integerValue, std::endian::big); 17 | 18 | TEST_ASSERT(std::memcmp(&floatValue, &integerValue, 8) == 0 && std::memcmp(&swappedFloatValue, &swappedIntegerValue, 8) == 0); 19 | 20 | TEST_SUCCESS(); 21 | }; 22 | -------------------------------------------------------------------------------- /tests/common/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(tests_common) 4 | 5 | add_library(tests_common STATIC 6 | source/main.cpp 7 | ) 8 | target_link_libraries(tests_common PUBLIC libimhex ${FMT_LIBRARIES} libwolv) 9 | -------------------------------------------------------------------------------- /tests/helpers/source/utils.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | using namespace std::literals::string_literals; 6 | 7 | TEST_SEQUENCE("SplitStringAtChar") { 8 | const std::string TestString = "Hello|World|ABCD|Test|"; 9 | const std::vector TestSplitVector = { "Hello", "World", "ABCD", "Test", "" }; 10 | 11 | TEST_ASSERT(hex::splitString(TestString, "|") == TestSplitVector); 12 | 13 | TEST_SUCCESS(); 14 | }; 15 | 16 | TEST_SEQUENCE("SplitStringAtString") { 17 | const std::string TestString = "Hello|DELIM|World|DELIM|ABCD|DELIM|Test|DELIM|"; 18 | const std::vector TestSplitVector = { "Hello", "World", "ABCD", "Test", "" }; 19 | 20 | TEST_ASSERT(hex::splitString(TestString, "|DELIM|") == TestSplitVector); 21 | 22 | TEST_SUCCESS(); 23 | }; 24 | 25 | TEST_SEQUENCE("ExtractBits") { 26 | TEST_ASSERT(hex::extract(11, 4, 0xAABBU) == 0xAB); 27 | TEST_ASSERT(hex::extract(15, 0, 0xAABBU) == 0xAABB); 28 | TEST_ASSERT(hex::extract(35, 20, 0x8899AABBCCDDEEFFU) == 0xBCCD); 29 | TEST_ASSERT(hex::extract(20, 35, 0x8899AABBCCDDEEFFU) == 0xBCCD); 30 | 31 | TEST_SUCCESS(); 32 | }; 33 | -------------------------------------------------------------------------------- /tests/plugins/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16) 2 | 3 | project(plugins_test) 4 | 5 | add_executable(${PROJECT_NAME} 6 | source/plugins.cpp 7 | ) 8 | 9 | 10 | # ---- No need to change anything from here downwards unless you know what you're doing ---- # 11 | 12 | target_include_directories(${PROJECT_NAME} PRIVATE include) 13 | target_link_libraries(${PROJECT_NAME} PRIVATE libimhex tests_common ${FMT_LIBRARIES}) 14 | 15 | set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 16 | add_dependencies(unit_tests ${PROJECT_NAME}) 17 | -------------------------------------------------------------------------------- /tests/plugins/source/plugins.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | 7 | using namespace hex; 8 | class PluginLoader { 9 | public: 10 | PluginLoader() { 11 | for (const auto &dir : paths::Plugins.read()) { 12 | PluginManager::addLoadPath(dir); 13 | } 14 | 15 | PluginManager::loadLibraries(); 16 | PluginManager::load(); 17 | } 18 | }; 19 | static PluginLoader pluginLoader; --------------------------------------------------------------------------------