ImHex Versions Save

🔍 A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.

v1.28.0

1 year ago

New projects

  • The documentation that has been finally written from scratch for most of the important features of ImHex and the Pattern Language. You can find it at https://imhex.werwolv.net/docs

  • The Pattern Language is now compatible with Emscripten so it can running in a browser! A proof of concept of this is available on https://pl.werwolv.net. It can do the same thing as the plcli's format option can do, it takes a pattern and a binary file and converts it to a JSON, YAML or HTML file.

New Plugins

Two new plugins have been developed for ImHex as well!

  • Malcore Plugin - Allows you to upload binary data to the Malcore service for analysis
  • Hashes Plugin - Adds tons of new hashes to the hashes view

Additions

  • Rewrote the entire Diffing view to make it actually usable
  • Added support for custom themes
    • These themes can either be downloaded through the Content Store or created and shared yourself through the Theme Manager
  • Custom nodes can now be downloaded from the Content Store
  • Added rotation and scale sliders to the 3D visualizer
  • Added support for loading custom CA certs
  • Added binary hex cell visualizer
  • ImHex now once again loads the entire unicode character plain if possible
  • Added option to disable saving of recently loaded files
  • File -> Save As can now be used in all providers correctly
  • Most string search options can now also be applied to the regex search
  • Custom data inspector rows can now be edited
  • Most main menu commands can now be found in the Command Palette (CTRL + SHIFT + P)
  • Added a new byte swapper tool to the tools view
  • Added new CRC hash types. Thanks to @jcreedon
  • Added new Fedora 38 build. Thanks to @jonathanspw

Improvements

  • Text editor now properly considers underscores as part of words
  • Removed x3.0 and x4.0 scaling settings as these caused issues with GPU drivers often
  • Files are no longer mapped into memory when opened by ImHex so other programs can keep using them now
  • The choose file dialog entries are now correctly sorted and display their full path when hovered
  • CTRL + N now properly creates a new memory file provider instead of opening a file picker. Thanks to @qux-bbb
  • Chunk size and analysis region can now be specified in the data information view. Thanks to @Fenrisfulsur
  • Custom encoding characters are now being rendered correctly when split between two lines
  • Recent items are now being limited to 5 files at max
  • The Yara match list is now sortable
  • Drastically improved Bookmarks view
  • Improved filtering speeds of the find view
  • The current commit hash and branch now correctly shows up in the About view on release builds
  • Providers now display better error messages when they can't load their data. Thanks to @iTrooz
  • Search processes from the find view can now be correctly canceled
  • A tooltip in the settings now informs the user about selecting custom fonts and scaling them
  • Improved the look and feel of the content store
  • Config files are now properly stored in the correct XDG directories on Linux
  • Selected custom encoding files are now correctly saved to the current project file
  • When a custom encoding is loaded and the ASCII column is disabled, there is no longer a huge gap now
  • The Character padding setting now properly applies to the custom encoding column
  • Improve loading speed of custom encoding files

Bug Fixes

  • Fixed the bug where ImHex would keep jumping back up in the hex view when making a selection
  • Fixed issues where UI was scaled too large
  • Fixed editing of binary values in the data inspector
  • Fixed various issues with the GDB provider
  • Fixed string search not including strings at the end of the data
  • Fixed rendering of UTF-16BE strings in find view
  • Fixed find view string search filters filtering wrong characters. Thanks to @qux-bbb
  • Fixed an issue where advancing to the next row when editing a byte would load the wrong value
  • Fixed Yara view filtering out all but one match
  • Fixed a crash when not making a valid selection in a provider load interface
  • Fixed moving around the hex editor cursor with the arrow keys
  • Fixed the standard magic file not always working correctly
  • Saving and loading a pattern will no longer add a new line to it
  • Using Save As on the current file no longer truncates it
  • Fixed rare freezes when resizing ImHex
  • Fixed occasional crashes when using ImHex through the Windows Remote Desktop
  • Fixed entering of decimal and float values in the hex editor with the relevant cell visualizer selected
  • Fixed filtering of long strings in the find view

Pattern Language

  • Added match statements. Thanks a lot to @Nowilltolife
  • Added std::math::accumulate. Thanks to @Nowilltolife
  • Added std::random functions
  • Added std::core::set_display_name function. Thanks to @amaksoft
  • Absolute MASSIVE improvements to bitfields. Huge thanks to @Zaggy1024
    • Conditionals now work correctly inside of bitfields
    • Added support for unsigned, signed, boolean and enum fields inside of bitfields
    • Added support for nested bitfields and bitfield arrays inside of bitfields
    • Replaced [[left_to_right]] and [[right_to_left]] with a [[bitfield_order]] attribute that offers more control
    • Added support for using regular types inside of bitfields
  • Massive improvements to templates. Again huge thanks to @Zaggy1024
    • Templates of the same type can now be nested
    • Template types can now be inherited from
    • Fixed various issues with templates in general
  • Added support for using any type as pointer size type
  • Added support for compiling the PatternLanguage to WebAssembly
  • CRC32 function now correctly calculates their value the same way ImHex does
  • Fixed highlighting of patterns placed in custom sections
  • Fixed casts changing endianess in big endian mode
  • Fixed 128 bit integer sign extension
  • Fixed formatting of 128 bit enums
  • Fixed placing of arrays in sections from within functions
  • Fixed some occurrences of duplicate identifiers not being caught
  • Fixed various issues related to doc comments
  • Fixed rvalue accesses in custom sections
  • Fixed type operators increasing the cursor position
  • Fixed modifiying of big endian values. Thanks to @soxfox42
  • Fixed issues with heap and pattern-local variables
  • Fixed [[hidden]] and [[highlight_hidden]] attributes not working correctly
  • Fixed creating of local variables in global scope
  • Fixed parsing of nested templates

Absolute massive thanks to everybody that got involved in this Project in the past weeks. You're amazing <3


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

GitHub donate button Patreon donate button PayPal donate button

v1.27.1

1 year ago

Screenshots

Improvements

  • Improved word selecting in text editor and added CTRL + Backspace/Delete shortcuts to delete full words

Bug Fixes

  • Fixed various build issues on some Linux platforms
  • Fixed safety backup restore popup getting hidden by the tip of the day popup

Pattern Language

  • Fixed attributes not being applied correctly to bitfield fields
  • Fixed issues where turning a type into bytes didn't correctly consider Proxy types with a zero size
  • Fixed offsets of static array members getting messed up by highlighting process
  • Fixed crash when returning invalid values from format/transform functions

Previous Release

Additions

  • Added support for selecting OTF font files as custom fonts
  • Added a new Division by Invariant Multiplication calculator tool
  • Added support for specifying multiple Yara rules to be executed in order
  • Added support for custom Nodes in the data processor
    • These nodes can be created directly in the editor and then exported and shared
    • We have a new section in the WerWolv/ImHex-Patterns repo for sharing these nodes!
  • Added support for specifying input values for integer and float inputs on nodes directly on the node itself
  • Added new builds for Fedora Rawhide, RHEL and AlmaLinux. Thanks to @jonathanspw
  • Resources such as patterns, includes and scripts can now be loaded from folders relative to the current project file
  • Task progress is now being displayed in the Taskbar on Windows
  • Added basic stack trace output on crash
  • Added support for macOS keyboard shortcut layouts. Thanks to @Kuruyia
  • Added support for saving more things to project files
  • Added a Base64 file exporter
  • Added option to copy the selected custom encoding string
  • Added a wait popup when Tasks are still running when ImHex is being closed
  • Added option to import patches from a modified version of the same file

Improvements

  • Project is now correctly closed when all providers have been closed. Thanks to @iTrooz
  • Improved handling of Projects in general
  • Improved native scaling handler on macOS
  • Added a short description to the IEEE754 decoder tool
  • Reordered File menu to make more logical sense
  • Allow .yar and .yara files to be loaded
  • Added better error messages for importing/exporting IPS patches
  • The process memory provider's process and module list can now be searched case-insensitively
  • The find view string finder can now be searched case-insensitively
  • Updated Japanese translation. Thanks to @Berylskid
  • Updated the German translation

Bug Fixes

  • Fixed IEEE 754 tool typo. Thanks to @ivq
  • Fixed the editing cursor not advancing automatically after the first page of data
  • Fixed Intel Hex and Motorola SREC files not being openable on macOS
  • Fixed issues with Yara rules not being able to include other rules
  • Fixed exceptions not displaying their error messages correctly
  • Fixed logs always being saved to user folders, even on portable releases
  • Fixed ImHex not being able to load properly in portable mode from a folder without permissions
  • Fixed rare crash when loading providers
  • Fixed importing of IPS and IPS32 patches being broken
  • Fixed find view not correctly accepting hexadecimal values
  • Fixed copying bytes from non-zero pages not working correctly
  • Fixed rendering of custom encodings on non-zero pages
  • Fixed CRC8 hashing algorithm displaying 16 bits instead of 8
  • Fixed loading of Hex and SREC files with new lines in them
  • Fixed last row in diff view always being displayed as zeros

Pattern Language

  • Added various Visualizers to graphically visualize patterns and binary data
    • Currently available Visualizers are line_plot, scatter_plot, image, bitmap, disassembler, 3d, sound
  • Added option to automatically expand or flatten the pattern data tree
  • Added support for specifying local variables inside of structs
  • Added ability to query various informations from the currently loaded provider
  • Added const variables
  • application/octet-stream is no longer considered a valid MIME type as it matches any unknown format
  • Bitfield field bit addresses now always specify the offset from the start of the bitfield instead of from the start of the current byte
  • Fixed editing of static array values
  • Fixed various issues with recursion
  • Fixed character patterns not always being formatted correctly
  • Fixed crash when removing out variables
  • Fixed string conversions not properly trimming values
  • Added better array out of bounds checks for arrays
  • Custom patterns are now always being passed as references implicitly
  • Fixed only the last pragma of a specific type to be executed
  • Added support for attributes with more than one parameter
  • Allow this to be used in variable attributes to refer to the current variable
  • Fixed printing of strings with null bytes in them
  • Fixed pointer values being evaluated twice
  • Added null keyword
  • Fixed #endif directives requiring a space behind it to work
  • Added format_read_entries, format_write_entries and transform_entries attributes
  • Added highlight_hidden attribute to disable highlighting of the current pattern

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

GitHub donate button Patreon donate button PayPal donate button

v1.27.0

1 year ago

Screenshots

Additions

  • Added support for selecting OTF font files as custom fonts
  • Added a new Division by Invariant Multiplication calculator tool
  • Added support for specifying multiple Yara rules to be executed in order
  • Added support for custom Nodes in the data processor
    • These nodes can be created directly in the editor and then exported and shared
    • We have a new section in the WerWolv/ImHex-Patterns repo for sharing these nodes!
  • Added support for specifying input values for integer and float inputs on nodes directly on the node itself
  • Added new builds for Fedora Rawhide, RHEL and AlmaLinux. Thanks to @jonathanspw
  • Resources such as patterns, includes and scripts can now be loaded from folders relative to the current project file
  • Task progress is now being displayed in the Taskbar on Windows
  • Added basic stack trace output on crash
  • Added support for macOS keyboard shortcut layouts. Thanks to @Kuruyia
  • Added support for saving more things to project files
  • Added a Base64 file exporter
  • Added option to copy the selected custom encoding string
  • Added a wait popup when Tasks are still running when ImHex is being closed
  • Added option to import patches from a modified version of the same file

Improvements

  • Project is now correctly closed when all providers have been closed. Thanks to @iTrooz
  • Improved handling of Projects in general
  • Improved native scaling handler on macOS
  • Added a short description to the IEEE754 decoder tool
  • Reordered File menu to make more logical sense
  • Allow .yar and .yara files to be loaded
  • Added better error messages for importing/exporting IPS patches
  • The process memory provider's process and module list can now be searched case-insensitively
  • The find view string finder can now be searched case-insensitively
  • Updated Japanese translation. Thanks to @Berylskid
  • Updated the German translation

Bug Fixes

  • Fixed IEEE 754 tool typo. Thanks to @ivq
  • Fixed the editing cursor not advancing automatically after the first page of data
  • Fixed Intel Hex and Motorola SREC files not being openable on macOS
  • Fixed issues with Yara rules not being able to include other rules
  • Fixed exceptions not displaying their error messages correctly
  • Fixed logs always being saved to user folders, even on portable releases
  • Fixed ImHex not being able to load properly in portable mode from a folder without permissions
  • Fixed rare crash when loading providers
  • Fixed importing of IPS and IPS32 patches being broken
  • Fixed find view not correctly accepting hexadecimal values
  • Fixed copying bytes from non-zero pages not working correctly
  • Fixed rendering of custom encodings on non-zero pages
  • Fixed CRC8 hashing algorithm displaying 16 bits instead of 8
  • Fixed loading of Hex and SREC files with new lines in them
  • Fixed last row in diff view always being displayed as zeros

Pattern Language

  • Added various Visualizers to graphically visualize patterns and binary data
    • Currently available Visualizers are line_plot, scatter_plot, image, bitmap, disassembler, 3d, sound
  • Added option to automatically expand or flatten the pattern data tree
  • Added support for specifying local variables inside of structs
  • Added ability to query various informations from the currently loaded provider
  • Added const variables
  • application/octet-stream is no longer considered a valid MIME type as it matches any unknown format
  • Bitfield field bit addresses now always specify the offset from the start of the bitfield instead of from the start of the current byte
  • Fixed editing of static array values
  • Fixed various issues with recursion
  • Fixed character patterns not always being formatted correctly
  • Fixed crash when removing out variables
  • Fixed string conversions not properly trimming values
  • Added better array out of bounds checks for arrays
  • Custom patterns are now always being passed as references implicitly
  • Fixed only the last pragma of a specific type to be executed
  • Added support for attributes with more than one parameter
  • Allow this to be used in variable attributes to refer to the current variable
  • Fixed printing of strings with null bytes in them
  • Fixed pointer values being evaluated twice
  • Added null keyword
  • Fixed #endif directives requiring a space behind it to work
  • Added format_read_entries, format_write_entries and transform_entries attributes
  • Added highlight_hidden attribute to disable highlighting of the current pattern

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

GitHub donate button Patreon donate button PayPal donate button

v1.26.2

1 year ago

Improvements

  • Made content store window resizable

Bug Fixes

  • Actually fixed the last releases not starting at all anymore on macOS and Linux

Previous Changelog

Additions

  • Added a "Save Project" menu entry to quickly save the current project without specifying a path
  • Added byte Type distribution, digram and layered distribution plots to information view
  • Added support for pasting byte strings with 0x prefixes or commas inbetween in the hex editor view. Thanks to @Diadlo for their initial implementation of this
  • Added native theming support
    • New themes can now simply be placed in the %IMHEX%/themes folder for them to be loaded
  • 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

v1.26.1

1 year ago

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

v1.26.0

1 year ago

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

v1.25.0

1 year ago

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

v1.24.3

1 year ago

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

v1.24.2

1 year ago

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

v1.24.1

1 year ago

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