Skip to content

Releases: WerWolv/ImHex

Process memory provider search bar, startup fixes

05 Jan 09:13
Compare
Choose a tag to compare

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
  • 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!

GitHub donate button Patreon donate button PayPal donate button

Process memory provider, native theming, better information view

04 Jan 15:36
Compare
Choose a tag to compare

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
  • 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!

GitHub donate button Patreon donate button PayPal donate button

View providers, custom sections

14 Nov 09:41
Compare
Choose a tag to compare

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 a i64 and floats use a long double instead of a float
  • 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 into 0x44434241
  • 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!

GitHub donate button Patreon donate button PayPal donate button

ASCII row editing, Out variable access node

12 Oct 11:03
Compare
Choose a tag to compare

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
  • 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 the Edit 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 to 0
  • 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!

GitHub donate button Patreon donate button PayPal donate button

Hex editor selection rendering fix, Addressof/Sizeof error message fix

10 Oct 19:33
Compare
Choose a tag to compare

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 and sizeof 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
  • 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 the Edit 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 to 0
  • 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!

GitHub donate button Patreon donate button PayPal donate button

Selected pattern highlighting, non-type template parameters,

10 Oct 18:08
Compare
Choose a tag to compare

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
  • 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 the Edit 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 to 0
  • 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!

GitHub donate button Patreon donate button PayPal donate button

Custom data inspector entries, numeric value searching, Templates

08 Oct 08:42
Compare
Choose a tag to compare

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
  • 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 the Edit 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 to 0
  • 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!

GitHub donate button Patreon donate button PayPal donate button

Linux crash fixes

17 Sep 14:06
Compare
Choose a tag to compare

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.
  • 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.
  • 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
  • Allow using declarations to change the name of builtin types
  • Added optional endian parameter to std::mem::read_unsigned and std::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) }
  • 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!

GitHub donate button Patreon donate button PayPal donate button

Pattern language speed improvements and bug fixes

17 Sep 07:28
Compare
Choose a tag to compare

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.
  • 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.
  • 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
  • Allow using declarations to change the name of builtin types
  • Added optional endian parameter to std::mem::read_unsigned and std::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) }
  • 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!

GitHub donate button Patreon donate button PayPal donate button

More 'Copy As...' options, Enum ranges and references

15 Sep 13:05
Compare
Choose a tag to compare

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.
  • 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.
  • 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
  • Allow using declarations to change the name of builtin types
  • Added optional endian parameter to std::mem::read_unsigned and std::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) }
  • 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!

GitHub donate button Patreon donate button PayPal donate button