Releases: WerWolv/ImHex
Custom layouts, Spanish translation, try-catch statements
Additions
- Added support for saving / loading your own Layouts!
- Added spanish translation. Thanks a lot to @XorTroll
- Added a network control interface
- When enabled, external tools can now send commands to ImHex over a TCP Socket
- Added non-ranged and aligned value search to find view
- Added a Documentation helper AI window where you can ask questions about ImHex and the Pattern Language
- Added selection range radio button to various views to allow specifying of exact start/end addresses
- Added a button to restore default layout when no views are open
- Opening .hexproj files through the File -> Open menu now opens them as Projects instead of as Files
- Names and Values in the pattern data view now display tooltips when hovering over them if they're too long
- Added bit and byte reversal nodes to the data processor. Thanks to @Nowilltolife
- Drastically improve the usefulness of the IEEE754 tool. Massive thanks to @paxcut
Improvements
- ImHex now tries its best to not keep any file handles around
- This should allow opening files in other tools while they're already open inside of ImHex.
- For this to work, the other tool needs to support sharing the file though.
- Some things that didn't really fit in the
Help
menu have been moved to the newExtras
menu - Many things that accessed file data are now significantly faster
- Files in the file chooser popup can now be opened by double clicking them
- Greatly improved how popups are being handled
- Pins in the data processor are more visible now
- Buttons in the bookmarks view now have tooltips
- ImHex's FPS limit now better follows the setting
- ImHex now shows an error message when it can't open files. Thanks to @iTrooz
- Pattern highlighting is now being generated much more quickly
- About page is now resizable
- Diff table is now being cleared properly when providers are closed
- MacOS should now be able to use the Open With dialog to open a file with ImHex
- Patterns that are empty can no longer be saved
- Patterns are now being automatically re-evaluated when code sync is on and the provider is being changed
- Fixed issue where the cursor icon sometimes got stuck on Windows
Bug Fixes
- Fixed crash when trying to place patterns through the Edit menu
- Fixed issue where Disassembler names didn't correspond to the correct architecture
- Fixed occasional crashes when opening project files
- Fixed a bug where the last line of patterns went missing when saving / reloading them
- Multi-window support is now disabled by default on Linux as it doesn't work well. It can still be enabled in the settings.
- Fixed issue where some shortcuts triggered twice
- Fixed commit link in about page not working correctly
- Fixed provider undo stack not working correctly
- Fixed crash when patterns are being evaluated to quickly in succession
- Fixed project files failing to save when custom encodings are loaded
- Fixed issue where ImHex sometimes dumped a bunch of compiled magic files into the user's current directory
- Fixed a crash when closing providers too quickly
- Fixed Copy-As options not being disabled correctly in some cases
- Fixed issue where editing a hex cell sometimes had the wrong value in it
Pattern Language
- Added try-catch statements
- Added
std::math::exp()
- The
std::file
functions can now write entire patterns to a file instead of just strings - Ternary operators now correctly short-circuit
- Fixed use of templates in pointer sizes
- Fixed tons and tons of bugs
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
`match` statements, `bitfield` improvements, custom themes
New projects
-
The documentation that has been finally written from scratch for most of the important features of ImHex and the Pattern Language. You can find it at https://imhex.werwolv.net/docs
-
The Pattern Language is now compatible with Emscripten so it can running in a browser! A proof of concept of this is available on https://pl.werwolv.net. It can do the same thing as the
plcli
'sformat
option can do, it takes a pattern and a binary file and converts it to a JSON, YAML or HTML file.
New Plugins
Two new plugins have been developed for ImHex as well!
- Malcore Plugin - Allows you to upload binary data to the Malcore service for analysis
- Hashes Plugin - Adds tons of new hashes to the hashes view
Additions
- Rewrote the entire Diffing view to make it actually usable
- Added support for custom themes
- These themes can either be downloaded through the Content Store or created and shared yourself through the Theme Manager
- Custom nodes can now be downloaded from the Content Store
- Added rotation and scale sliders to the 3D visualizer
- Added support for loading custom CA certs
- Added binary hex cell visualizer
- ImHex now once again loads the entire unicode character plain if possible
- Added option to disable saving of recently loaded files
- File -> Save As can now be used in all providers correctly
- Most string search options can now also be applied to the regex search
- Custom data inspector rows can now be edited
- Most main menu commands can now be found in the Command Palette (CTRL + SHIFT + P)
- Added a new byte swapper tool to the tools view
- Added new CRC hash types. Thanks to @jcreedon
- Added new Fedora 38 build. Thanks to @jonathanspw
Improvements
- Text editor now properly considers underscores as part of words
- Removed x3.0 and x4.0 scaling settings as these caused issues with GPU drivers often
- Files are no longer mapped into memory when opened by ImHex so other programs can keep using them now
- The choose file dialog entries are now correctly sorted and display their full path when hovered
- CTRL + N now properly creates a new memory file provider instead of opening a file picker. Thanks to @qux-bbb
- Chunk size and analysis region can now be specified in the data information view. Thanks to @Fenrisfulsur
- Custom encoding characters are now being rendered correctly when split between two lines
- Recent items are now being limited to 5 files at max
- The Yara match list is now sortable
- Drastically improved Bookmarks view
- Improved filtering speeds of the find view
- The current commit hash and branch now correctly shows up in the About view on release builds
- Providers now display better error messages when they can't load their data. Thanks to @iTrooz
- Search processes from the find view can now be correctly canceled
- A tooltip in the settings now informs the user about selecting custom fonts and scaling them
- Improved the look and feel of the content store
- Config files are now properly stored in the correct XDG directories on Linux
- Selected custom encoding files are now correctly saved to the current project file
- When a custom encoding is loaded and the ASCII column is disabled, there is no longer a huge gap now
- The Character padding setting now properly applies to the custom encoding column
- Improve loading speed of custom encoding files
Bug Fixes
- Fixed the bug where ImHex would keep jumping back up in the hex view when making a selection
- Fixed issues where UI was scaled too large
- Fixed editing of binary values in the data inspector
- Fixed various issues with the GDB provider
- Fixed string search not including strings at the end of the data
- Fixed rendering of UTF-16BE strings in find view
- Fixed find view string search filters filtering wrong characters. Thanks to @qux-bbb
- Fixed an issue where advancing to the next row when editing a byte would load the wrong value
- Fixed Yara view filtering out all but one match
- Fixed a crash when not making a valid selection in a provider load interface
- Fixed moving around the hex editor cursor with the arrow keys
- Fixed the standard magic file not always working correctly
- Saving and loading a pattern will no longer add a new line to it
- Using Save As on the current file no longer truncates it
- Fixed rare freezes when resizing ImHex
- Fixed occasional crashes when using ImHex through the Windows Remote Desktop
- Fixed entering of decimal and float values in the hex editor with the relevant cell visualizer selected
- Fixed filtering of long strings in the find view
Pattern Language
- Added
match
statements. Thanks a lot to @Nowilltolife - Added
std::math::accumulate
. Thanks to @Nowilltolife - Added
std::random
functions - Added
std::core::set_display_name
function. Thanks to @amaksoft - Absolute MASSIVE improvements to bitfields. Huge thanks to @Zaggy1024
- Conditionals now work correctly inside of bitfields
- Added support for unsigned, signed, boolean and enum fields inside of bitfields
- Added support for nested bitfields and bitfield arrays inside of bitfields
- Replaced [[left_to_right]] and [[right_to_left]] with a [[bitfield_order]] attribute that offers more control
- Added support for using regular types inside of bitfields
- Massive improvements to templates. Again huge thanks to @Zaggy1024
- Templates of the same type can now be nested
- Template types can now be inherited from
- Fixed various issues with templates in general
- Added support for using any type as pointer size type
- Added support for compiling the PatternLanguage to WebAssembly
- CRC32 function now correctly calculates their value the same way ImHex does
- Fixed highlighting of patterns placed in custom sections
- Fixed casts changing endianess in big endian mode
- Fixed 128 bit integer sign extension
- Fixed formatting of 128 bit enums
- Fixed placing of arrays in sections from within functions
- Fixed some occurrences of duplicate identifiers not being caught
- Fixed various issues related to doc comments
- Fixed rvalue accesses in custom sections
- Fixed type operators increasing the cursor position
- Fixed modifiying of big endian values. Thanks to @soxfox42
- Fixed issues with heap and pattern-local variables
- Fixed [[hidden]] and [[highlight_hidden]] attributes not working correctly
- Fixed creating of local variables in global scope
- Fixed parsing of nested templates
Absolute massive thanks to everybody that got involved in this Project in the past weeks. You're amazing <3
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Text Editor improvements, bug fixes
Screenshots
Improvements
- Improved word selecting in text editor and added CTRL + Backspace/Delete shortcuts to delete full words
Bug Fixes
- Fixed various build issues on some Linux platforms
- Fixed safety backup restore popup getting hidden by the tip of the day popup
Pattern Language
- Fixed attributes not being applied correctly to bitfield fields
- Fixed issues where turning a type into bytes didn't correctly consider Proxy types with a zero size
- Fixed offsets of static array members getting messed up by highlighting process
- Fixed crash when returning invalid values from format/transform functions
Previous Release
Additions
- Added support for selecting OTF font files as custom fonts
- Added a new Division by Invariant Multiplication calculator tool
- Added support for specifying multiple Yara rules to be executed in order
- Added support for custom Nodes in the data processor
- These nodes can be created directly in the editor and then exported and shared
- We have a new section in the WerWolv/ImHex-Patterns repo for sharing these nodes!
- Added support for specifying input values for integer and float inputs on nodes directly on the node itself
- Added new builds for Fedora Rawhide, RHEL and AlmaLinux. Thanks to @jonathanspw
- Resources such as patterns, includes and scripts can now be loaded from folders relative to the current project file
- Task progress is now being displayed in the Taskbar on Windows
- Added basic stack trace output on crash
- Added support for macOS keyboard shortcut layouts. Thanks to @Kuruyia
- Added support for saving more things to project files
- Added a Base64 file exporter
- Added option to copy the selected custom encoding string
- Added a wait popup when Tasks are still running when ImHex is being closed
- Added option to import patches from a modified version of the same file
Improvements
- Project is now correctly closed when all providers have been closed. Thanks to @iTrooz
- Improved handling of Projects in general
- Improved native scaling handler on macOS
- Added a short description to the IEEE754 decoder tool
- Reordered File menu to make more logical sense
- Allow .yar and .yara files to be loaded
- Added better error messages for importing/exporting IPS patches
- The process memory provider's process and module list can now be searched case-insensitively
- The find view string finder can now be searched case-insensitively
- Updated Japanese translation. Thanks to @Berylskid
- Updated the German translation
Bug Fixes
- Fixed IEEE 754 tool typo. Thanks to @ivq
- Fixed the editing cursor not advancing automatically after the first page of data
- Fixed Intel Hex and Motorola SREC files not being openable on macOS
- Fixed issues with Yara rules not being able to include other rules
- Fixed exceptions not displaying their error messages correctly
- Fixed logs always being saved to user folders, even on portable releases
- Fixed ImHex not being able to load properly in portable mode from a folder without permissions
- Fixed rare crash when loading providers
- Fixed importing of IPS and IPS32 patches being broken
- Fixed find view not correctly accepting hexadecimal values
- Fixed copying bytes from non-zero pages not working correctly
- Fixed rendering of custom encodings on non-zero pages
- Fixed CRC8 hashing algorithm displaying 16 bits instead of 8
- Fixed loading of Hex and SREC files with new lines in them
- Fixed last row in diff view always being displayed as zeros
Pattern Language
- Added various Visualizers to graphically visualize patterns and binary data
- Currently available Visualizers are
line_plot
,scatter_plot
,image
,bitmap
,disassembler
,3d
,sound
- Currently available Visualizers are
- Added option to automatically expand or flatten the pattern data tree
- Added support for specifying local variables inside of structs
- Added ability to query various informations from the currently loaded provider
- Added
const
variables application/octet-stream
is no longer considered a valid MIME type as it matches any unknown format- Bitfield field bit addresses now always specify the offset from the start of the bitfield instead of from the start of the current byte
- Fixed editing of static array values
- Fixed various issues with recursion
- Fixed character patterns not always being formatted correctly
- Fixed crash when removing out variables
- Fixed string conversions not properly trimming values
- Added better array out of bounds checks for arrays
- Custom patterns are now always being passed as references implicitly
- Fixed only the last pragma of a specific type to be executed
- Added support for attributes with more than one parameter
- Allow
this
to be used in variable attributes to refer to the current variable - Fixed printing of strings with null bytes in them
- Fixed pointer values being evaluated twice
- Added
null
keyword - Fixed
#endif
directives requiring a space behind it to work - Added
format_read_entries
,format_write_entries
andtransform_entries
attributes - Added
highlight_hidden
attribute to disable highlighting of the current pattern
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Pattern Visualizers, better data processor
Screenshots
Additions
- Added support for selecting OTF font files as custom fonts
- Added a new Division by Invariant Multiplication calculator tool
- Added support for specifying multiple Yara rules to be executed in order
- Added support for custom Nodes in the data processor
- These nodes can be created directly in the editor and then exported and shared
- We have a new section in the WerWolv/ImHex-Patterns repo for sharing these nodes!
- Added support for specifying input values for integer and float inputs on nodes directly on the node itself
- Added new builds for Fedora Rawhide, RHEL and AlmaLinux. Thanks to @jonathanspw
- Resources such as patterns, includes and scripts can now be loaded from folders relative to the current project file
- Task progress is now being displayed in the Taskbar on Windows
- Added basic stack trace output on crash
- Added support for macOS keyboard shortcut layouts. Thanks to @Kuruyia
- Added support for saving more things to project files
- Added a Base64 file exporter
- Added option to copy the selected custom encoding string
- Added a wait popup when Tasks are still running when ImHex is being closed
- Added option to import patches from a modified version of the same file
Improvements
- Project is now correctly closed when all providers have been closed. Thanks to @iTrooz
- Improved handling of Projects in general
- Improved native scaling handler on macOS
- Added a short description to the IEEE754 decoder tool
- Reordered File menu to make more logical sense
- Allow .yar and .yara files to be loaded
- Added better error messages for importing/exporting IPS patches
- The process memory provider's process and module list can now be searched case-insensitively
- The find view string finder can now be searched case-insensitively
- Updated Japanese translation. Thanks to @Berylskid
- Updated the German translation
Bug Fixes
- Fixed IEEE 754 tool typo. Thanks to @ivq
- Fixed the editing cursor not advancing automatically after the first page of data
- Fixed Intel Hex and Motorola SREC files not being openable on macOS
- Fixed issues with Yara rules not being able to include other rules
- Fixed exceptions not displaying their error messages correctly
- Fixed logs always being saved to user folders, even on portable releases
- Fixed ImHex not being able to load properly in portable mode from a folder without permissions
- Fixed rare crash when loading providers
- Fixed importing of IPS and IPS32 patches being broken
- Fixed find view not correctly accepting hexadecimal values
- Fixed copying bytes from non-zero pages not working correctly
- Fixed rendering of custom encodings on non-zero pages
- Fixed CRC8 hashing algorithm displaying 16 bits instead of 8
- Fixed loading of Hex and SREC files with new lines in them
- Fixed last row in diff view always being displayed as zeros
Pattern Language
- Added various Visualizers to graphically visualize patterns and binary data
- Currently available Visualizers are
line_plot
,scatter_plot
,image
,bitmap
,disassembler
,3d
,sound
- Currently available Visualizers are
- Added option to automatically expand or flatten the pattern data tree
- Added support for specifying local variables inside of structs
- Added ability to query various informations from the currently loaded provider
- Added
const
variables application/octet-stream
is no longer considered a valid MIME type as it matches any unknown format- Bitfield field bit addresses now always specify the offset from the start of the bitfield instead of from the start of the current byte
- Fixed editing of static array values
- Fixed various issues with recursion
- Fixed character patterns not always being formatted correctly
- Fixed crash when removing out variables
- Fixed string conversions not properly trimming values
- Added better array out of bounds checks for arrays
- Custom patterns are now always being passed as references implicitly
- Fixed only the last pragma of a specific type to be executed
- Added support for attributes with more than one parameter
- Allow
this
to be used in variable attributes to refer to the current variable - Fixed printing of strings with null bytes in them
- Fixed pointer values being evaluated twice
- Added
null
keyword - Fixed
#endif
directives requiring a space behind it to work - Added
format_read_entries
,format_write_entries
andtransform_entries
attributes - Added
highlight_hidden
attribute to disable highlighting of the current pattern
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Actually fix startup issues
Improvements
- Made content store window resizable
Bug Fixes
- Actually fixed the last releases not starting at all anymore on macOS and Linux
Previous Changelog
Additions
- Added a "Save Project" menu entry to quickly save the current project without specifying a path
- Added byte Type distribution, digram and layered distribution plots to information view
- Added support for pasting byte strings with
0x
prefixes or commas inbetween in the hex editor view. Thanks to @Diadlo for their initial implementation of this - Added native theming support
- New themes can now simply be placed in the
%IMHEX%/themes
folder for them to be loaded
- New themes can now simply be placed in the
- Added a Process Memory Provider on Windows
- This provider can attach to any process and read its entire address space
- It can also list all available sections and modules, and inject new DLLs
Improvements
- ImHex now automatically disables unicode support if the used GPU doesn't have enough VRAM to load all glyphs
- Debug builds now completely ignore plugins that are not in the
plugins
folder next to the executable- This is useful for debugging issues especially on Linux systems where ImHex has been installed using a package manager
- The localization system has been completely revamped and now uses simple json files
- If you plan on adding support for a new language, there's a simple tool to help you with that now. Check out the HACKING.md file for more information
- Improved speed of entropy graph calculation
- Improved German translation. Thanks to @123456abcdef
- Improved Chinese (Simplified) translation. Thanks to @xtexChooser
- ImHex is now compiled using
-Wpedantic
to make sure we're using valid ISO C++
Bug Fixes
- Fixed building with LTO enabled
- Fixed patterns not appearing if pattern editor is not visible
- Fixed a crash when closing a section view while bytes were selected
- Fixed file provider adding additional zero bytes at the end of the file when saving
- Fixed issues where the hex editor view would sometimes jump back to the start of the file after searching
- Fixed searching for negative floating point values
- Fixed a crash when printing NULL bytes to the pattern console
- Fixed bookmarks displaying too many bytes in some cases
- Fixed saving of projects to paths containing non-ASCII characters
- Fixed various issues where iterators and containers got accessed incorrectly which could lead to issues and crashes
- Fixed template types being placable through the hex editor right click menu
Pattern Language
- Added the ability to modify values in the pattern data view
- To go into editing mode, double click the value field of a pattern in the pattern data view
- This works for all built-in types as well as enums by default
- If you want to make your own types modifyable, use the
[[format_write]]
attribute
- Arrays are now displayed without extra indentation if there's less than 512 entries in it
- Added visualizers
- Currently available are a basic line plot and an image visualizer
- They can be used through the
[[hex::visualizer]]
attribute
- Added support for anonymous patterns
- Allow sections to be initialized using strings
- Added new
std::mem::find_string_in_range
function str
variables can now be used in global scope- Patterns views can now be placed from functions using the placement syntax
- This doesn't add a new pattern to the pattern list but can be used to read/write bytes
- Added
$[123]
syntax to read a single byte from the main memory - Added support for doc comments
- These can be parsed and turned into markdown files using the plcli tool
- Allow attributes to directly use rvalues instead of being limited to string literals only
- This allows you to for example have pattern names, colors and many other things depend on values in the type they are applied to
- Fixed passing local variables to functions
- Fixed array out of bounds checks applying to heap arrays
- File handles are now cleaned up completely after evaluaton finishes
- Fixed reading from bitfield fields that have been placed in a different section
- Fixed
[[sealed]]
attribute not working correctly with static arrays - Improved pattern memory usage
- Fixed various issues with reference parameters
- Fixed bitfield fields not respecting endianess settings
- The
[[format]]
attribute has been deprecated in favour of the new[[format_read]]
and[[format_write]]
attributes - Fixed some patterns having no name or a black color
- Fixed broken sign extension of 64 and 128 bit signed variables
- Fixed dynamic arrays always overriding colors
- Fixed indexing of strings and wide strings
- Prevented indexing of non-indexable types
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Process memory provider search bar, startup fixes
Additions
- Added search bars to the process memory provider's process and module list
Bug Fixes
- Fixed the last release not starting at all anymore on macOS and Linux
Previous Changelog
Additions
- Added a "Save Project" menu entry to quickly save the current project without specifying a path
- Added byte Type distribution, digram and layered distribution plots to information view
- Added support for pasting byte strings with
0x
prefixes or commas inbetween in the hex editor view. Thanks to @Diadlo for their initial implementation of this - Added native theming support
- New themes can now simply be placed in the
%IMHEX%/themes
folder for them to be loaded
- New themes can now simply be placed in the
- Added a Process Memory Provider on Windows
- This provider can attach to any process and read its entire address space
- It can also list all available sections and modules, and inject new DLLs
Improvements
- ImHex now automatically disables unicode support if the used GPU doesn't have enough VRAM to load all glyphs
- Debug builds now completely ignore plugins that are not in the
plugins
folder next to the executable- This is useful for debugging issues especially on Linux systems where ImHex has been installed using a package manager
- The localization system has been completely revamped and now uses simple json files
- If you plan on adding support for a new language, there's a simple tool to help you with that now. Check out the HACKING.md file for more information
- Improved speed of entropy graph calculation
- Improved German translation. Thanks to @123456abcdef
- Improved Chinese (Simplified) translation. Thanks to @xtexChooser
- ImHex is now compiled using
-Wpedantic
to make sure we're using valid ISO C++
Bug Fixes
- Fixed building with LTO enabled
- Fixed patterns not appearing if pattern editor is not visible
- Fixed a crash when closing a section view while bytes were selected
- Fixed file provider adding additional zero bytes at the end of the file when saving
- Fixed issues where the hex editor view would sometimes jump back to the start of the file after searching
- Fixed searching for negative floating point values
- Fixed a crash when printing NULL bytes to the pattern console
- Fixed bookmarks displaying too many bytes in some cases
- Fixed saving of projects to paths containing non-ASCII characters
- Fixed various issues where iterators and containers got accessed incorrectly which could lead to issues and crashes
- Fixed template types being placable through the hex editor right click menu
Pattern Language
- Added the ability to modify values in the pattern data view
- To go into editing mode, double click the value field of a pattern in the pattern data view
- This works for all built-in types as well as enums by default
- If you want to make your own types modifyable, use the
[[format_write]]
attribute
- Arrays are now displayed without extra indentation if there's less than 512 entries in it
- Added visualizers
- Currently available are a basic line plot and an image visualizer
- They can be used through the
[[hex::visualizer]]
attribute
- Added support for anonymous patterns
- Allow sections to be initialized using strings
- Added new
std::mem::find_string_in_range
function str
variables can now be used in global scope- Patterns views can now be placed from functions using the placement syntax
- This doesn't add a new pattern to the pattern list but can be used to read/write bytes
- Added
$[123]
syntax to read a single byte from the main memory - Added support for doc comments
- These can be parsed and turned into markdown files using the plcli tool
- Allow attributes to directly use rvalues instead of being limited to string literals only
- This allows you to for example have pattern names, colors and many other things depend on values in the type they are applied to
- Fixed passing local variables to functions
- Fixed array out of bounds checks applying to heap arrays
- File handles are now cleaned up completely after evaluaton finishes
- Fixed reading from bitfield fields that have been placed in a different section
- Fixed
[[sealed]]
attribute not working correctly with static arrays - Improved pattern memory usage
- Fixed various issues with reference parameters
- Fixed bitfield fields not respecting endianess settings
- The
[[format]]
attribute has been deprecated in favour of the new[[format_read]]
and[[format_write]]
attributes - Fixed some patterns having no name or a black color
- Fixed broken sign extension of 64 and 128 bit signed variables
- Fixed dynamic arrays always overriding colors
- Fixed indexing of strings and wide strings
- Prevented indexing of non-indexable types
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Process memory provider, native theming, better information view
Additions
- Added a "Save Project" menu entry to quickly save the current project without specifying a path
- Added byte Type distribution, digram and layered distribution plots to information view
- Added support for pasting byte strings with
0x
prefixes or commas inbetween in the hex editor view. Thanks to @Diadlo for their initial implementation of this - Added native theming support
- New themes can now simply be placed in the
%IMHEX%/themes
folder for them to be loaded
- New themes can now simply be placed in the
- Added a Process Memory Provider on Windows
- This provider can attach to any process and read its entire address space
- It can also list all available sections and modules, and inject new DLLs
Improvements
- ImHex now automatically disables unicode support if the used GPU doesn't have enough VRAM to load all glyphs
- Debug builds now completely ignore plugins that are not in the
plugins
folder next to the executable- This is useful for debugging issues especially on Linux systems where ImHex has been installed using a package manager
- The localization system has been completely revamped and now uses simple json files
- If you plan on adding support for a new language, there's a simple tool to help you with that now. Check out the HACKING.md file for more information
- Improved speed of entropy graph calculation
- Improved German translation. Thanks to @123456abcdef
- Improved Chinese (Simplified) translation. Thanks to @xtexChooser
- ImHex is now compiled using
-Wpedantic
to make sure we're using valid ISO C++
Bug Fixes
- Fixed building with LTO enabled
- Fixed patterns not appearing if pattern editor is not visible
- Fixed a crash when closing a section view while bytes were selected
- Fixed file provider adding additional zero bytes at the end of the file when saving
- Fixed issues where the hex editor view would sometimes jump back to the start of the file after searching
- Fixed searching for negative floating point values
- Fixed a crash when printing NULL bytes to the pattern console
- Fixed bookmarks displaying too many bytes in some cases
- Fixed saving of projects to paths containing non-ASCII characters
- Fixed various issues where iterators and containers got accessed incorrectly which could lead to issues and crashes
- Fixed template types being placable through the hex editor right click menu
Pattern Language
- Added the ability to modify values in the pattern data view
- To go into editing mode, double click the value field of a pattern in the pattern data view
- This works for all built-in types as well as enums by default
- If you want to make your own types modifyable, use the
[[format_write]]
attribute
- Arrays are now displayed without extra indentation if there's less than 512 entries in it
- Added visualizers
- Currently available are a basic line plot and an image visualizer
- They can be used through the
[[hex::visualizer]]
attribute
- Added support for anonymous patterns
- Allow sections to be initialized using strings
- Added new
std::mem::find_string_in_range
function str
variables can now be used in global scope- Patterns views can now be placed from functions using the placement syntax
- This doesn't add a new pattern to the pattern list but can be used to read/write bytes
- Added
$[123]
syntax to read a single byte from the main memory - Added support for doc comments
- These can be parsed and turned into markdown files using the plcli tool
- Allow attributes to directly use rvalues instead of being limited to string literals only
- This allows you to for example have pattern names, colors and many other things depend on values in the type they are applied to
- Fixed passing local variables to functions
- Fixed array out of bounds checks applying to heap arrays
- File handles are now cleaned up completely after evaluaton finishes
- Fixed reading from bitfield fields that have been placed in a different section
- Fixed
[[sealed]]
attribute not working correctly with static arrays - Improved pattern memory usage
- Fixed various issues with reference parameters
- Fixed bitfield fields not respecting endianess settings
- The
[[format]]
attribute has been deprecated in favour of the new[[format_read]]
and[[format_write]]
attributes - Fixed some patterns having no name or a black color
- Fixed broken sign extension of 64 and 128 bit signed variables
- Fixed dynamic arrays always overriding colors
- Fixed indexing of strings and wide strings
- Prevented indexing of non-indexable types
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
View providers, custom sections
Additions
- All tool windows can now be detached
- Added a RGBA8 image visualizer node to the data processor
- Added a
uninstall
target to the build script. Thanks to @iTrooz - Added
CTRL + SHIFT + Z
as a Undo shortcut. Thanks to @iTrooz - Added a menu to the Edit menu to automatically place a pattern type at the current selection
- New files are now created in memory and only turned into actual files when saved
- Added
Paste all
option to paste all bytes and resize the provider accordingly if it's too small - Added Display Buffer, Display String, Arithmetic Average, Arithmetic Median and Buffer Patch data processor nodes
- Added a setting to disable loading of unicode characters. Thanks to @iTrooz
- ImHex now no longer makes any web requests unless specifically instructed to do so by the user. Thanks to @iTrooz
- Added a new View provider to open a view of section of another provider in a new tab
Improvements
- Non-existing folders are now displayed in red in the paths list. Thanks to @iTrooz
- Visualizer data processor nodes now only show a bigger view of their content if SHIFT is held down
- Greatly improved various error messages. Thanks to @iTrooz
- Improved precision of data passed between nodes in the data processor
- Integers now use a
i128
internally instead of ai64
and floats use along double
instead of afloat
- Integers now use a
- Various pattern editor settings are now unique per provider
- Yara rule matching can now be interrupted
- Multiple Yara rules can now be applied at the same time
- Limited the maximum window name length to 32 characters
- Improved window scaling on macOS
- The pattern editor now always inserts spaces instead of tabs
Bug Fixes
- Fixed a crash when loading a new provider after evaluating pattern source code
- Fixed issues when modifying bytes on any pages but the first one
- Fixed editing not working on some Linux systems
- Fixed a crash when scrolling to the end of a file that's a multiple of 8 bytes long
- Fixed an issue that prevented pattern auto loading to work correctly on Windows. Thanks to @Asvel
- Fixed opening multiple files by dragging them onto the window
Pattern Language
- Added custom sections support
- This feature allows you to dynamically create new memory regions, write data to them and then place patterns in them
- This is useful for encrypted, compressed or otherwise transformed data
- Allow casting of strings to integers for magic numbers. For example
u32("ABCD")
turns into0x44434241
- Fixed template types not being correctly cleared on reset
- Fixed creating global arrays of certain types
- Fixed a crash when validating infinitely recursive types
- Fixed issues when returning custom types from inside of a conditional
- Fixed printing of zero sized arrays
- Fixed
[[hidden]]
attributes not applying to top level patterns - Evaluation time is now being displayed in the console once execution finished
- Removed some unneeded overhead
- Fixed format function memory leak
- Fixed
sizeof(this)
yielding incorrect results - Fixed some statements not being executed at all in global scope
- Greatly improved the speed of
std::hash::crc32
- Added
std::core::is_valid_enum
function to check if a enum has a valid representation
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
ASCII row editing, Out variable access node
Additions
- Added support for editing the ASCII characters in the hex editor view
- Added new Float <-> Buffer conversion nodes to the data processor
- Added new Pattern Language Out variable access node to the pattern processor
Bug Fixes
- Fixed a occasional crash when opening providers
- Fixed 64 bit hex data visualizer only displaying 32 bit values
- Fixed some gaps in the hex editor cell background highlighting
- Fixed data inspector still displaying entries despite no bytes being selected
- Fixed invalid axis labels of the plots in the data analyzer view
Pattern Language
- Fixed an issue that caused attributes to not work correctly
- Fixed non-type template parameters in using declarations
- Fixed error in formatting function always causing a recursion error after a while
Previous Changelog
Additions
- Patterns that overlap with the selected bytes in the hex editor view are now highlighted in blue in the pattern data view
- It's now possible to add custom Data Inspector entries using the Pattern Language
- To do this, create a new file in the
%IMHEX_PATH%/scripts/inspectors
folder with the.pat
extension and enter you pattern code there - Each value that has been placed in memory using the
@
operator will be added to the list - To get the current selected offset, use the
$
operator
- To do this, create a new file in the
- Added numeric value searching to Find View
- Added unique selection and scrolling position support for each provider
- This means when you scroll somewhere and select some data in a file, then switch to a different one and select some bytes there, the selection and scroll position in the original file will still remain where they were
- Added icons next to all textfields
- These display what kind of input this textfield supports. For example: Text, Numbers, Mathematical expressions, Regex, Binary Pattern, etc.
- Modified bytes are now being highlighted in red in the hex editor view until they are saved
- Added Wide Strings (UTF-16) to the Data Inspector
- Added Half Floats to the Data Inspector
- Bookmarks can now be reordered by dragging them around
- The color picker in Bookmarks now has a bunch of predefined colors that can be selected by clicking on them
- Added a
Jump to
option to theEdit
menu that allows scrolling directly to the currently selected region - Added option to the settings menu to explicitly disable multi window support
- This is useful for systems that either don't properly support Multi Window support or for people using Tiled Window Managers which get very confused by these extra windows.
- If you can't open ImHex properly because of this, you can also manually set the
hex.builtin.setting.interface.multi_windows
setting in the config file to0
- Added new options to the settings menu to adjust the padding between individual bytes and the padding between ASCII characters in the hex editor view
Improvements
- Reduced File / Provider loading time to basically zero
- Completely removed all lag that happened when typing in the pattern editor
- This extends out to other things that were doing work asynchronously (Disassembler, Yara, Analyzer, etc.)
- Improved startup time of ImHex by about 50%
- Huge pattern arrays will now be split up into chunks of 512 entries in the Pattern Data View to make them easier to navigate.
- Properly display an error message when a Project failed to load
- Display an error message with potential fixes if the file dialog couldn't be opened on Linux. Thanks to @iTrooz
- The File Provider no longer keeps files open when it doesn't need to
- This means other applications that support it, can now open files that are already open in ImHex
- Improved selection and drag scrolling in the Hex Editor View
- ASCII Table background colors are no longer hardcoded so it looks correct in Light Mode
- Limited the maximum number of characters that can be displayed in the tooltip that shows up when hovering over a pattern in the Hex editor view to prevent the tooltip from growing indefinitely
- Properly center current selection when jumping to it
Bug Fixes
- Fixed Copy-As Python Array putting a semicolon at the end of the data
- Fixed issues when multiple web requests are running simultaneously
- Fixed issue where file inspector failed to read over page boundaries
- Fixed crash when the hex editor view data visualizer cell byte size was not evenly divisible by the column count
- Fixed many issues and crashes with the Calculator Tool
- Fixed various UTF-8 path bugs that prevented ImHex to work correctly on systems that have non-ASCII characters in their paths
- Fixed issue where the data processor nodes did not remember their position correctly when switching to a different provider
- Fixed potential crashes when trying to paste clipboard data when it's empty
- Fixed flickering of the Pattern Data View when executing a pattern
- Fixed opening files with unicode names through the command line
- Fixed a crash when closing ImHex after launching it through the terminal
- Fixed scrolling issues and improved the whole scrolling system overall
- Fixed pattern evaluator not exiting evaluating state correctly in some cases
- Fixed new lines in wide strings messing up the data inspector view layout
- Fixed highlighting of separator column in the hex editor view
Pattern Language
- Added Templates for structs, unions and using declarations
- Break and Continue can now be used outside of arrays to terminate stop evaluating the current type
- Return can now be used anywhere outside of functions to terminate execution of the entire pattern
- Added function to get current hex editor selection as an ImHex Extension
- Added function to demangle a string as an ImHex Extension
- Added support for global arrays
- Added non-type template parameters
- Allow custom types to be used inside of
sizeof
operators- This might yield incorrect results if the type's size is not static
- Added better error messages when parsing invalid struct, bitfield and if statements. Thanks to @Calcoph
- Fixed many many issues with templates
- Fixed using control flow statements inside of conditionals
- Fixed padding fields being displayed in bitfields
- Allow use of compound statements in global scope
- The ternary operator no longer enforces exactly the same types for the second and third operand
- Fixed highlighting of arrays of arrays
- Fixed bitfield order not resetting correctly
- Fixed indexing of strings
- Prevent the user from indexing other non-array types
- Fixed a crash when using
break
in an unsized array - Fixed
std::mem::read_signed
yielding invalid values - Fixed formatting of signed hex values
- Fixed accessing of local arrays
- Fixed string pattern not correctly reading all bytes
- Fixed a few out of bounds indexing errors in the Preprocessor
- Fixed reading from local float variables
- Fixed a crash when passing invalid values to the
std::time
library - Fixed issue where while-sized static arrays could expand indefinitely beyond the end of the data
- Fixed crash with empty dynamic arrays
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Hex editor selection rendering fix, Addressof/Sizeof error message fix
Improvements
- Many CI improvements once again. Thanks a lot to @iTrooz
Bug Fixes
- Fixed rendering of selection in Hex Editor view
Pattern Language
- Fixed an incorrect error message with
addressof
andsizeof
operators
Previous Changelog
Additions
- Patterns that overlap with the selected bytes in the hex editor view are now highlighted in blue in the pattern data view
- It's now possible to add custom Data Inspector entries using the Pattern Language
- To do this, create a new file in the
%IMHEX_PATH%/scripts/inspectors
folder with the.pat
extension and enter you pattern code there - Each value that has been placed in memory using the
@
operator will be added to the list - To get the current selected offset, use the
$
operator
- To do this, create a new file in the
- Added numeric value searching to Find View
- Added unique selection and scrolling position support for each provider
- This means when you scroll somewhere and select some data in a file, then switch to a different one and select some bytes there, the selection and scroll position in the original file will still remain where they were
- Added icons next to all textfields
- These display what kind of input this textfield supports. For example: Text, Numbers, Mathematical expressions, Regex, Binary Pattern, etc.
- Modified bytes are now being highlighted in red in the hex editor view until they are saved
- Added Wide Strings (UTF-16) to the Data Inspector
- Added Half Floats to the Data Inspector
- Bookmarks can now be reordered by dragging them around
- The color picker in Bookmarks now has a bunch of predefined colors that can be selected by clicking on them
- Added a
Jump to
option to theEdit
menu that allows scrolling directly to the currently selected region - Added option to the settings menu to explicitly disable multi window support
- This is useful for systems that either don't properly support Multi Window support or for people using Tiled Window Managers which get very confused by these extra windows.
- If you can't open ImHex properly because of this, you can also manually set the
hex.builtin.setting.interface.multi_windows
setting in the config file to0
- Added new options to the settings menu to adjust the padding between individual bytes and the padding between ASCII characters in the hex editor view
Improvements
- Reduced File / Provider loading time to basically zero
- Completely removed all lag that happened when typing in the pattern editor
- This extends out to other things that were doing work asynchronously (Disassembler, Yara, Analyzer, etc.)
- Improved startup time of ImHex by about 50%
- Huge pattern arrays will now be split up into chunks of 512 entries in the Pattern Data View to make them easier to navigate.
- Properly display an error message when a Project failed to load
- Display an error message with potential fixes if the file dialog couldn't be opened on Linux. Thanks to @iTrooz
- The File Provider no longer keeps files open when it doesn't need to
- This means other applications that support it, can now open files that are already open in ImHex
- Improved selection and drag scrolling in the Hex Editor View
- ASCII Table background colors are no longer hardcoded so it looks correct in Light Mode
- Limited the maximum number of characters that can be displayed in the tooltip that shows up when hovering over a pattern in the Hex editor view to prevent the tooltip from growing indefinitely
- Properly center current selection when jumping to it
Bug Fixes
- Fixed Copy-As Python Array putting a semicolon at the end of the data
- Fixed issues when multiple web requests are running simultaneously
- Fixed issue where file inspector failed to read over page boundaries
- Fixed crash when the hex editor view data visualizer cell byte size was not evenly divisible by the column count
- Fixed many issues and crashes with the Calculator Tool
- Fixed various UTF-8 path bugs that prevented ImHex to work correctly on systems that have non-ASCII characters in their paths
- Fixed issue where the data processor nodes did not remember their position correctly when switching to a different provider
- Fixed potential crashes when trying to paste clipboard data when it's empty
- Fixed flickering of the Pattern Data View when executing a pattern
- Fixed opening files with unicode names through the command line
- Fixed a crash when closing ImHex after launching it through the terminal
- Fixed scrolling issues and improved the whole scrolling system overall
- Fixed pattern evaluator not exiting evaluating state correctly in some cases
- Fixed new lines in wide strings messing up the data inspector view layout
- Fixed highlighting of separator column in the hex editor view
Pattern Language
- Added Templates for structs, unions and using declarations
- Break and Continue can now be used outside of arrays to terminate stop evaluating the current type
- Return can now be used anywhere outside of functions to terminate execution of the entire pattern
- Added function to get current hex editor selection as an ImHex Extension
- Added function to demangle a string as an ImHex Extension
- Added support for global arrays
- Added non-type template parameters
- Allow custom types to be used inside of
sizeof
operators- This might yield incorrect results if the type's size is not static
- Added better error messages when parsing invalid struct, bitfield and if statements. Thanks to @Calcoph
- Fixed many many issues with templates
- Fixed using control flow statements inside of conditionals
- Fixed padding fields being displayed in bitfields
- Allow use of compound statements in global scope
- The ternary operator no longer enforces exactly the same types for the second and third operand
- Fixed highlighting of arrays of arrays
- Fixed bitfield order not resetting correctly
- Fixed indexing of strings
- Prevent the user from indexing other non-array types
- Fixed a crash when using
break
in an unsized array - Fixed
std::mem::read_signed
yielding invalid values - Fixed formatting of signed hex values
- Fixed accessing of local arrays
- Fixed string pattern not correctly reading all bytes
- Fixed a few out of bounds indexing errors in the Preprocessor
- Fixed reading from local float variables
- Fixed a crash when passing invalid values to the
std::time
library - Fixed issue where while-sized static arrays could expand indefinitely beyond the end of the data
- Fixed crash with empty dynamic arrays
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!