1
0
mirror of synced 2025-01-29 19:17:28 +01:00
WerWolv 3e6865ffa9
sys/build: Properly support per-system metadata file paths (#181)
* sys: Move away from metadata paths next to executable in the application

Build system doesn't properly install / pack stuff yet

* build: Updated README to contain better install instructions

* sys: Search for imhex resource files in ~/Application Support

* sys: MAX_PATH -> PATH_MAX

* sys: Seach for imhex resource files in Application Support using NSFileManager (#180)

* sys: Allow for multiple file search paths

Also use install prefix instead of just /usr on Linux

* build: Fixed IMHEX_INSTALL_PREFIX macro definition

* build: Fix duplicate switch entry on Linux

* docs: Updated readme to properly reflect new paths and dependencies

* sys: Install files in their proper paths on linux (#183)

* Install files in their proper paths on linux

* Only create user directories

* Follow the XDG specification on linux

XDG specification specifies how to find config and data directories on
linux systems. Specifically, it says this:

- Data should be written to $XDG_DATA_HOME
- Config should be written to $XDG_CONFIG_HOME
- Data should be read from $XDG_DATA_HOME:$XDG_DATA_DIRS
- Config should be read from $XDG_CONFIG_HOME:$XDG_CONFIG_DIRS

The default values are this:

- XDG_DATA_HOME: $HOME/.local/share
- XDG_CONFIG_HOME: $HOME/.config
- XDG_DATA_DIRS: /usr/share:/usr/local/share
- XDG_CONFIG_DIRS: /etc/xdg

Platforms with non-standard filesystems (like NixOS) will correctly set
up those environment variables, allowing softwares to work unmodified.

In order to make integration as simple as possible, we use a simple
header-only dependency called XDGPP which does all the hard work for us
to find the default directories.

* Look for plugins in all Plugin Paths

If the plugin folder was missing from one of the PluginPaths, we would
immediately stop loading plugins. We now keep looking even if one of the
path is missing.

Co-authored-by: Nichole Mattera <me@nicholemattera.com>
Co-authored-by: Robin Lambertz <unfiltered@roblab.la>
2021-03-01 08:56:49 +01:00
2021-01-11 16:03:10 +01:00
2021-01-02 20:27:11 +01:00
2020-12-03 15:34:58 +01:00

🔍 ImHex

A Hex Editor for Reverse Engineers, Programmers and people that value their eye sight when working at 3 AM.

'Build' workflow Status Discord Server

Supporting

If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!

GitHub donate button Patreon donate button PayPal donate button

Features

  • Featureful hex view
    • Byte patching
    • Patch management
    • Copy bytes as feature
      • Bytes
      • Hex string
      • C, C++, C#, Rust, Python, Java & JavaScript array
      • ASCII-Art hex view
      • HTML self contained div
    • String and hex search
    • Colorful highlighting
    • Goto from start, end and current cursor position
  • Custom C++-like pattern language for parsing highlighting a file's content
    • Automatic loading based on MIME type
    • arrays, pointers, structs, unions, enums, bitfields, using declarations, little and big endian support, conditionals and much more!
    • Useful error messages, syntax highlighting and error marking
  • Data importing
    • Base64 files
    • IPS and IPS32 patches
  • Data exporting
    • IPS and IPS32 patches
  • Data inspector allowing interpretation of data as many different types (little and big endian)
  • Huge file support with fast and efficient loading
  • String search
    • Copying of strings
    • Copying of demangled strings
  • File hashing support
    • CRC16 and CRC32 with custom initial values and polynomials
    • MD4, MD5
    • SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
  • Disassembler supporting many different architectures
    • ARM32 (ARM, Thumb, Cortex-M, AArch32)
    • ARM64
    • MIPS (MIPS32, MIPS64, MIPS32R6, Micro)
    • x86 (16-bit, 32-bit, 64-bit)
    • PowerPC (32-bit, 64-bit)
    • SPARC
    • IBM SystemZ
    • xCORE
    • M68K
    • TMS320C64X
    • M680X
    • Ethereum
  • Bookmarks
    • Region highlighting
    • Comments
  • Data Analyzer
    • File magic-based file parser and MIME type database
    • Byte distribution graph
    • Entropy graph
    • Highest and average entropy
    • Encrypted / Compressed file detection
  • Helpful tools
    • Itanium and MSVC demangler
    • ASCII table
    • Regex replacer
    • Mathematical expression evaluator (Calculator)
    • Hexadecimal Color picker
  • Built-in cheat sheet for pattern language and Math evaluator
  • Doesn't burn out your retinas when used in late-night sessions

Screenshots

Pattern Language

The custom C-like Pattern Language developed and used by ImHex is easy to read, understand and learn. A guide with all features of the language can be found in the wiki or a simpler version in ImHex under Help -> Pattern Language Cheat Sheet

Additional Files

For format patterns, includable libraries and magic files, check out the ImHex-Patterns repository. Feel free to PR your own files there as well!

Nightly builds

Nightlies are available via GitHub Actions here.

Compiling

You need a C++20 compatible compiler such as GCC 10.2.0 to compile ImHex. Moreover, the following dependencies are needed for compiling ImHex:

  • GLFW3
  • libmagic, libgnurx, libtre, libintl, libiconv
  • libcrypto
  • capstone
  • Python3
  • freetype2
  • Brew (macOS only)
  • Xcode (macOS only)

Windows

On Windows, ImHex is built through msys2 / mingw. To install all dependencies, open a mys2 window and run the PKGCONFIG script in the (dist/msys2)[dist/msys2] folder. After all the dependencies are installed, run the following commands to build ImHex:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j

To create a standalone zipfile on Windows, get the Python standard library (e.g. from https://github.com/python/cpython/tree/master/Lib) and place the files and folders in lib/python3.8 next to your built executable. Don't forget to also copy the libpython3.8.dll and libwinpthread-1.dll from your mingw setup next to the executable.

  • Copy the files from python_libs in the lib folder next to your built executable.
  • Place your magic databases in the magic folder next to your built executable
  • Place your patterns in the pattern folder next to your built executable
  • Place your include pattern files in the include folder next to your built executable

macOS

To build ImHex on macOS, run the following commands:

brew bundle --no-lock --file dist/Brewfile
mkdir build
cd build
CC=$(brew --prefix llvm)/bin/clang CXX=$(brew --prefix llvm)/bin/clang++ PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig":"$(brew --prefix)/lib/pkgconfig" cmake -DCMAKE_BUILD_TYPE=Release ..
make -j

Install the ImHex executable as well as libimhex.dylib to wherever ImHex should be installed.

All other files belong in ~/Library/Application Support/imhex:

Patterns: ~/Library/Application Support/imhex/patterns
Pattern Includes: ~/Library/Application Support/imhex/includes
Magic files: ~/Library/Application Support/imhex/magic
Python: ~/Library/Application Support/imhex/lib/pythonX.X
Plugins: ~/Library/Application Support/imhex/plugins
Configuration: ~/Library/Application Support/imhex/config
Resources: ~/Library/Application Support/imhex/resources

Linux

Dependency installation scripts are available for many common Linux distributions in the (/dist)[dist] folder. After all the dependencies are installed, run the following commands to build ImHex:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j

Put the ImHex executable into the /usr/bin folder. Put libimhex.so into the /usr/lib folder. All other files belong in /usr/share/imhex or ~/.imhex:

Patterns: /usr/share/imhex/patterns
Pattern Includes: /usr/share/imhex/includes
Magic files: /usr/share/imhex/magic
Python: /usr/share/imhex/lib/pythonX.X
Plugins: /usr/share/imhex/imhex/plugins
Configuration: /usr/share/imhex/config
Resources: /usr/share/imhex/resources

The /usr prefix can be customized by changing the cmake install path

Credits

  • Thanks a lot to ocornut for their amazing Dear ImGui which is used for building the entire interface
    • Thanks to orconut as well for their hex editor view used as base for this project.
    • Thanks to BalazsJako for their incredible ImGuiColorTextEdit used for the pattern language syntax highlighting
    • Thanks to AirGuanZ for their amazing imgui-filebrowser used for loading and saving files
  • Thanks to nlohmann for their json library used for project files
  • Thanks to aquynh for capstone which is the base of the disassembly window
Languages
C++ 94.2%
CMake 4.3%
Objective-C 0.7%
C# 0.6%
GLSL 0.1%