Releases: WerWolv/ImHex
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!
Selected pattern highlighting, non-type template parameters,
Additions
- Patterns that overlap with the selected bytes in the hex editor view are now highlighted in blue in the pattern data view
Improvements
- Properly center current selection when jumping to it
Bug Fixes
- 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 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
Previous Changelog
Additions
- 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
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
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
- 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!
Custom data inspector entries, numeric value searching, Templates
Additions
- 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
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
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
- 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!
Linux crash fixes
Changelog
Bug Fixes
- Actually fixed ImHex crashing on some Linux systems when trying to open a file
Previous Changelog
Additions
- Added many new Copy As... options
- Current Address
- Base64
- Lua array
- Go array
- Crystal array
- Swift arrary
- Pascal array
- Added zsync file to releases. Thanks a lot to @iTrooz
- This file can be used to auto-update the AppImage
- Added "Require full match" toggle to Regex finder
- Added reset button to Find view to clear the currently found items
- Pattern Database files are now included by default in the Flatpak build. Thanks to @ColinKinloch
- Added support to open multiple files at once through the command line
Improvements
- Improved formatting of ASCII Text area and HTML Copy as... output
- Disabled FPS displaying in release builds
- Improved rendering of patterns in the pattern data view
- Removed unused space in hex editor footer
- Improved load times of ImHex on some systems
- Pattern evaluation can now be aborted with the task stop button
Bug Fixes
- Fixed crash when resizing a file
- Fixed graphical artifacts on welcome screen footer
- Fixed welcome screen settings button only working sometimes
- Fixed rendering of pattern array entries
- Fixed searching for invalid sequences in the Find view to yield way too many results
- Fixed sequence escape codes being parsed incorrectly
- Fixed opening files in an existing instance of ImHex not always working correctly
- Fixed the dangerous function popup reappearing constantly
Pattern Language
- Added support for enum ranges
- If values in a range have the same meaning, you can now use
MY_ENUM_VALUE = 0x10 ... 0x20
to have the formatter display all values in that range as such.
- If values in a range have the same meaning, you can now use
- Added references
- If you need to use a variable in a function without copying it onto the heap (for performance reasons or if you have pointers inside your structure), you can now use the
ref
keyword before your parameter type to turn it into a reference.
- If you need to use a variable in a function without copying it onto the heap (for performance reasons or if you have pointers inside your structure), you can now use the
- Added #ifdef, #ifndef, #endif, #error and #define without a value
- Applications can also set their own global defines, for example ImHex sets the
__IMHEX__
and__IMHEX_VERSION__
macro by default
- Applications can also set their own global defines, for example ImHex sets the
- Allow
using
declarations to change the name of builtin types - Added optional endian parameter to
std::mem::read_unsigned
andstd::mem::read_signed
- Improved Lexer, Parser and Preprocessor performance
- Massively improved function call and formatting performance
- Improved color highlighting
- Improved bitfield value visualization
- Bitfields are now displayed as
{ FLAG_A | FLAG_B | VALUE(123) }
- Bitfields are now displayed as
- Fixed out of bounds read when having a comment at the end of the file
- Fixed local variable assignments not always working correctly
- Fixed cast issues when passing enums to functions
- Fixed pattern limit from applying after evaluation has already finished
- Fixed #pargma once not working correctly
- Fixed subtraction of two unsigned values yielding unexpected results
- Fixed stringifying variables not outputting their formatted value
- Fixed casts incrementing current offset
- Fixed reading bytes when a non-zero base address is being used
- Fixed parsing of attributes following r-values
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Pattern language speed improvements and bug fixes
Changelog
Improvements
- Pre-fill the size field of the "Remove bytes" popup with the current selection size
Bug Fixes
- Fixed ImHex crashing on some Linux systems when trying to open a file
- Fixed "Copy As..." function (but also others) having their second-to-last byte wrong
Pattern Language
- TONS of speed improvements
- Prevent debug mode string formatting from occurring on non-debug mode
- Improved stringification of pattern performance
- Improved function calling performance
- Improved flattening performance of static arrays
- Prevent accessing values through the dot syntax unnecessarily copying data
Previous Changelog
Additions
- Added many new Copy As... options
- Current Address
- Base64
- Lua array
- Go array
- Crystal array
- Swift arrary
- Pascal array
- Added zsync file to releases. Thanks a lot to @iTrooz
- This file can be used to auto-update the AppImage
- Added "Require full match" toggle to Regex finder
- Added reset button to Find view to clear the currently found items
- Pattern Database files are now included by default in the Flatpak build. Thanks to @ColinKinloch
- Added support to open multiple files at once through the command line
Improvements
- Improved formatting of ASCII Text area and HTML Copy as... output
- Disabled FPS displaying in release builds
- Improved rendering of patterns in the pattern data view
- Removed unused space in hex editor footer
- Improved load times of ImHex on some systems
- Pattern evaluation can now be aborted with the task stop button
Bug Fixes
- Fixed crash when resizing a file
- Fixed graphical artifacts on welcome screen footer
- Fixed welcome screen settings button only working sometimes
- Fixed rendering of pattern array entries
- Fixed searching for invalid sequences in the Find view to yield way too many results
- Fixed sequence escape codes being parsed incorrectly
- Fixed opening files in an existing instance of ImHex not always working correctly
- Fixed the dangerous function popup reappearing constantly
Pattern Language
- Added support for enum ranges
- If values in a range have the same meaning, you can now use
MY_ENUM_VALUE = 0x10 ... 0x20
to have the formatter display all values in that range as such.
- If values in a range have the same meaning, you can now use
- Added references
- If you need to use a variable in a function without copying it onto the heap (for performance reasons or if you have pointers inside your structure), you can now use the
ref
keyword before your parameter type to turn it into a reference.
- If you need to use a variable in a function without copying it onto the heap (for performance reasons or if you have pointers inside your structure), you can now use the
- Added #ifdef, #ifndef, #endif, #error and #define without a value
- Applications can also set their own global defines, for example ImHex sets the
__IMHEX__
and__IMHEX_VERSION__
macro by default
- Applications can also set their own global defines, for example ImHex sets the
- Allow
using
declarations to change the name of builtin types - Added optional endian parameter to
std::mem::read_unsigned
andstd::mem::read_signed
- Improved Lexer, Parser and Preprocessor performance
- Massively improved function call and formatting performance
- Improved color highlighting
- Improved bitfield value visualization
- Bitfields are now displayed as
{ FLAG_A | FLAG_B | VALUE(123) }
- Bitfields are now displayed as
- Fixed out of bounds read when having a comment at the end of the file
- Fixed local variable assignments not always working correctly
- Fixed cast issues when passing enums to functions
- Fixed pattern limit from applying after evaluation has already finished
- Fixed #pargma once not working correctly
- Fixed subtraction of two unsigned values yielding unexpected results
- Fixed stringifying variables not outputting their formatted value
- Fixed casts incrementing current offset
- Fixed reading bytes when a non-zero base address is being used
- Fixed parsing of attributes following r-values
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
More 'Copy As...' options, Enum ranges and references
Changelog
Additions
- Added many new Copy As... options
- Current Address
- Base64
- Lua array
- Go array
- Crystal array
- Swift arrary
- Pascal array
- Added zsync file to releases. Thanks a lot to @iTrooz
- This file can be used to auto-update the AppImage
- Added "Require full match" toggle to Regex finder
- Added reset button to Find view to clear the currently found items
- Pattern Database files are now included by default in the Flatpak build. Thanks to @ColinKinloch
- Added support to open multiple files at once through the command line
Improvements
- Improved formatting of ASCII Text area and HTML Copy as... output
- Disabled FPS displaying in release builds
- Improved rendering of patterns in the pattern data view
- Removed unused space in hex editor footer
- Improved load times of ImHex on some systems
- Pattern evaluation can now be aborted with the task stop button
Bug Fixes
- Fixed crash when resizing a file
- Fixed graphical artifacts on welcome screen footer
- Fixed welcome screen settings button only working sometimes
- Fixed rendering of pattern array entries
- Fixed searching for invalid sequences in the Find view to yield way too many results
- Fixed sequence escape codes being parsed incorrectly
- Fixed opening files in an existing instance of ImHex not always working correctly
- Fixed the dangerous function popup reappearing constantly
Pattern Language
- Added support for enum ranges
- If values in a range have the same meaning, you can now use
MY_ENUM_VALUE = 0x10 ... 0x20
to have the formatter display all values in that range as such.
- If values in a range have the same meaning, you can now use
- Added references
- If you need to use a variable in a function without copying it onto the heap (for performance reasons or if you have pointers inside your structure), you can now use the
ref
keyword before your parameter type to turn it into a reference.
- If you need to use a variable in a function without copying it onto the heap (for performance reasons or if you have pointers inside your structure), you can now use the
- Added #ifdef, #ifndef, #endif, #error and #define without a value
- Applications can also set their own global defines, for example ImHex sets the
__IMHEX__
and__IMHEX_VERSION__
macro by default
- Applications can also set their own global defines, for example ImHex sets the
- Allow
using
declarations to change the name of builtin types - Added optional endian parameter to
std::mem::read_unsigned
andstd::mem::read_signed
- Improved Lexer, Parser and Preprocessor performance
- Massively improved function call and formatting performance
- Improved color highlighting
- Improved bitfield value visualization
- Bitfields are now displayed as
{ FLAG_A | FLAG_B | VALUE(123) }
- Bitfields are now displayed as
- Fixed out of bounds read when having a comment at the end of the file
- Fixed local variable assignments not always working correctly
- Fixed cast issues when passing enums to functions
- Fixed pattern limit from applying after evaluation has already finished
- Fixed #pargma once not working correctly
- Fixed subtraction of two unsigned values yielding unexpected results
- Fixed stringifying variables not outputting their formatted value
- Fixed casts incrementing current offset
- Fixed reading bytes when a non-zero base address is being used
- Fixed parsing of attributes following r-values
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!