Skip to content

Releases: WerWolv/ImHex

[Packaging fixes] Web and M1 version, Workspaces, Tutorials, Auto backups and more

28 Dec 18:53
Compare
Choose a tag to compare

Bug Fixes

  • Ubuntu package no longer refers to an invalid libarchive package
  • Windows packages now include libarchive and libcapstone dlls
  • Library plugins are properly being initialized on macOS now
  • ImHex doesn't crash anymore when opening the diffing view

Previous Changes

This release has been cooking for a very long time and encompasses over 500 commits improving basically every single aspect of ImHex in one way or another. Hope y'all like it 鉂わ笍

Additions

  • ImHex is now available for the Web!
    • It supports basically 99% of all features that the native version does (minus things like process memory, raw disk providers and some other things that browsers just don't have access to)
    • Check it out at https://web.imhex.werwolv.net
    • Support was added entirely by @iTrooz. Massive thanks to him!
  • ImHex now has a native Apple M1 build!
    • Currently this version is cross compiled from Linux
    • It is unsigned and distributed in a zip file instead of a dmg (You might need to disable SIP to run it)
    • Any PRs improving this are highly welcome!
    • Again huge thanks to @iTrooz for adding this
  • Added a Auto Updater
    • Currently this supports the Windows MSI version, Ubuntu and macOS dmg version.
  • Added a shortcut manager to the Settings
  • Added Markdown reports
    • This system allows you to export things like bookmarks, patterns and data information to a markdown file for easy documentation
  • Greatly improve the Undo/Redo system
    • This now allows you to undo and redo things like resizes, insertions and removals that previously were irreversible
    • Important to note is, all changes made in ImHex still get applied to the file directly!
  • Added option to specify custom highlighting rules to set the foreground color of bytes according to boolean equations
  • Added Workspaces
    • These enhance the old Layout system by allowing you to create multiple workspaces all with their own layouts and freely switch between them
  • Added a minimal layout
    • Many people just want to have a dirt simple Hex Editor and not all the extra features ImHex offers
    • The minimal layout is meant for them. It hides everything except the hex editor and makes the UI much simpler
  • Added automatic backups
    • Ever had ImHex crash on you randomly in the middle of work you haven't saved? Well now automatic backups can be enabled in the settings to they are created every N seconds
  • Added a interactive tutorial
    • There's currently just a simple one to get people started but more will be added in the future
  • Merged in old ExtraHashes plugin
    • This adds support for about 20 new hashes such as Adler32, Blake, Tiger and Murmur
  • The Process Memory provider can now be used in Linux. Thanks a lot to @trumank
  • Added support for locking layouts
  • Replaced weird Import -> Base 64 option with a full Base64 provider
    • This provider can transparently decode and re-encode base64 files to view and modify them
  • Added support for Fedora 39, removed support for Fedora 37. Thanks to @jonathanspw
  • Added support for hiding individual data inspector rows
  • Added simple right click context menu to the pattern editor
  • Added setting to enable colored pattern row backgrounds
  • Added bitwise shift left/right nodes to the data processor
  • Added release notes and commits to about page
  • Added some fun things :)
  • Added simple data access graph to pattern editor when a pattern is being executed
  • All the copy-as formatters can now output data directly to a file
  • Patterns in the pattern data view can now be filtered by value
    • For example using myStruct.* > 5 shows all members inside of myStruct with a value greater than 5
  • Added a TCP Client/Server tester tool
  • Added a simple function graphing calculator tool
  • Added euclidean algorithms tool
  • Added a search bar to open the command palette to the title bar
  • Added pretty syntax highlighting to the demangler tool
  • Added support for making fonts bold or italic
  • Vastly improved the 3D Visualizer to render the model much nicer. Thanks a lot to @paxcut
    • This includes specular lighting, light colors, wireframe mode, a grid and axes arrows
  • Added --hexdump subcommand to the CLI to get a hexdump of a file
  • Added --demangle subcommand to the CLI to demangle symbols
  • Added setting to enable resource usage widgets in the footer
  • Added new unit conversion tool to command pallette
    • It currently supports switching between different number formats as well as byte / bit representations
    • Some valid inputs are 5MiB in hex, 0x42000 to Mb or 0xAABBCC in decimal
  • Added support for searching for specific strings in UTF-16 and while ignoring the character case
  • Added button to export pattern language sections to a file

Improvements

  • Rewrote, restructured and redesigned Settings interface
  • Updated ImGui to v1.90
    • We also merged in the new Shadows branch to add pretty shadows to all windows
  • Lots and lots of UI improvements
    • Replaced many info and error popup modals with toasts
  • Lots and lots of internal rewrites, restructures and refactors
    • Most of these changes aren't user-facing, however they made many systems much more stable so they won't break as easily anymore in the future
  • Scrolling in the hex editor now works much nicer
    • A entire 64 bit address space can now be displayed on one virtual page without losing precision
  • Drastically improved performance of some background tasks
    • Analyzing data regions and searching through the data will be much faster now
  • Edit -> Jump to can now jump to big and little endian addresses
  • ImHex now supports using integrated GPUs on macOS
  • The Raw Disk Provider now lists all physical drives on Windows and displays more friendly disk names now
  • Default magic database is now bundled with application instead of being part of the content store
  • The ImHex window is now force set to be 100% opaque which should fix issues where the window is partially transparent on some GPUs
  • Newly opened windows are now automatically docked instead of floating around
  • Improved "Unsaved Changes" popup that shows up when closing unsaved providers
  • Zeros in the HTML formatted data are now grayed out
  • Shift-Backspace now works in the pattern editor
  • The color picker tool is much more useful now
    • Added support for outputting colors in many different bit layouts with a specifyable amount of bits
    • Added displaying of the name of the selected color
  • Fixed docking two tool windows to each other making both disappear
  • Files that are inside of subfolders now display their relative path in the file chooser popup
  • Advanced provider settings (when available) are now part of the sidebar
  • Hovering over a color in the Theme Manager now flashes that color in yellow in the UI
  • CRC32 now uses reflected version by default as that is the standard. Thanks to @qux-bbb
  • Many tables now refuse to collapse to zero-height
  • Glyphs in the font atlas are now packed more efficiently so GPUs won't reject the texture as often anymore
  • Bookmark addresses can now be changed in the UI after creating them
  • The hex editor's footer is now collapsible
  • More popups can now be closed by pressing Escape
  • ImHex now tries to only render frames when it has to, saving more system resources
  • Fixed some issues where settings might be reset in rare cases

Bug Fixes

  • Fixed issue where no provider was being selected when closing a provider in some cases
  • Fixed console opening and not disappearing when using the Windows Terminal
  • Moving windows that overlap with the main window title bar no longer move the main window
  • Popups that are not visible on the screen anymore are now properly reset back to the center
  • Hovering over a provider tab always showed information about the current provider
  • Fixed a crash when opening invalid files through the CLI
  • Fixed achievement triggering every single time a file was opened through the CLI
  • Fixed issues where the recursion check in the data processor triggered too early
  • Fixed data processor workspaces not always loading correctly from a project file
  • Fixed issues where the native scaling of ImHex was way too small
  • Fixed modifying bytes sometimes get populated with incorrect values
  • Fixed binary pattern search being broken with alignments greater than 1
  • Fixed file picker not handling supported extensions correctly
  • Fixed crash when using a too large column count in the hex editor
  • Fixed issues with unary operators when evaluating mathematical expressions
  • Fixed out-of-bounds reads when opening a zero-sized file
  • Fixed highlight colors of bookmarks in the hex editor not changing when updating the bookmark's color
  • Fixed opening files with non-ASCII file paths from the command line
  • Fixed numeric search tool not displaying values in the correct endianess
  • Fixed diffing view highlighting not working correctly with a custom base address

Pattern Language

  • Ongoing: Big parts of the Pattern Language are currently being rewritten in order to drastically improve usability, speed and reliability
  • Added support for writing back to the data source
    • Adding #pragma allow_edits and then just assigning to a placed variable will now modify the analyzed data
  • Added support for decompressing data
  • Pattern non-type template parameters are no longer added to the output
  • Fixed std::math::atan2 not being registered correctly
  • Fixed a bunch of other issues

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

Read more

Web and M1 version, Workspaces, Tutorials, Auto backups and more

28 Dec 00:00
Compare
Choose a tag to compare

This release has been cooking for a very long time and encompasses over 500 commits improving basically every single aspect of ImHex in one way or another. Hope y'all like it 鉂わ笍

Additions

  • ImHex is now available for the Web!
    • It supports basically 99% of all features that the native version does (minus things like process memory, raw disk providers and some other things that browsers just don't have access to)
    • Check it out at https://web.imhex.werwolv.net
    • Support was added entirely by @iTrooz. Massive thanks to him!
  • ImHex now has a native Apple M1 build!
    • Currently this version is cross compiled from Linux
    • It is unsigned and distributed in a zip file instead of a dmg (You might need to disable SIP to run it)
    • Any PRs improving this are highly welcome!
    • Again huge thanks to @iTrooz for adding this
  • Added a Auto Updater
    • Currently this supports the Windows MSI version, Ubuntu and macOS dmg version.
  • Added a shortcut manager to the Settings
  • Added Markdown reports
    • This system allows you to export things like bookmarks, patterns and data information to a markdown file for easy documentation
  • Greatly improve the Undo/Redo system
    • This now allows you to undo and redo things like resizes, insertions and removals that previously were irreversible
    • Important to note is, all changes made in ImHex still get applied to the file directly!
  • Added option to specify custom highlighting rules to set the foreground color of bytes according to boolean equations
  • Added Workspaces
    • These enhance the old Layout system by allowing you to create multiple workspaces all with their own layouts and freely switch between them
  • Added a minimal layout
    • Many people just want to have a dirt simple Hex Editor and not all the extra features ImHex offers
    • The minimal layout is meant for them. It hides everything except the hex editor and makes the UI much simpler
  • Added automatic backups
    • Ever had ImHex crash on you randomly in the middle of work you haven't saved? Well now automatic backups can be enabled in the settings to they are created every N seconds
  • Added a interactive tutorial
    • There's currently just a simple one to get people started but more will be added in the future
  • Merged in old ExtraHashes plugin
    • This adds support for about 20 new hashes such as Adler32, Blake, Tiger and Murmur
  • The Process Memory provider can now be used in Linux. Thanks a lot to @trumank
  • Added support for locking layouts
  • Replaced weird Import -> Base 64 option with a full Base64 provider
    • This provider can transparently decode and re-encode base64 files to view and modify them
  • Added support for Fedora 39, removed support for Fedora 37. Thanks to @jonathanspw
  • Added support for hiding individual data inspector rows
  • Added simple right click context menu to the pattern editor
  • Added setting to enable colored pattern row backgrounds
  • Added bitwise shift left/right nodes to the data processor
  • Added release notes and commits to about page
  • Added some fun things :)
  • Added simple data access graph to pattern editor when a pattern is being executed
  • All the copy-as formatters can now output data directly to a file
  • Patterns in the pattern data view can now be filtered by value
    • For example using myStruct.* > 5 shows all members inside of myStruct with a value greater than 5
  • Added a TCP Client/Server tester tool
  • Added a simple function graphing calculator tool
  • Added euclidean algorithms tool
  • Added a search bar to open the command palette to the title bar
  • Added pretty syntax highlighting to the demangler tool
  • Added support for making fonts bold or italic
  • Vastly improved the 3D Visualizer to render the model much nicer. Thanks a lot to @paxcut
    • This includes specular lighting, light colors, wireframe mode, a grid and axes arrows
  • Added --hexdump subcommand to the CLI to get a hexdump of a file
  • Added --demangle subcommand to the CLI to demangle symbols
  • Added setting to enable resource usage widgets in the footer
  • Added new unit conversion tool to command pallette
    • It currently supports switching between different number formats as well as byte / bit representations
    • Some valid inputs are 5MiB in hex, 0x42000 to Mb or 0xAABBCC in decimal
  • Added support for searching for specific strings in UTF-16 and while ignoring the character case
  • Added button to export pattern language sections to a file

Improvements

  • Rewrote, restructured and redesigned Settings interface
  • Updated ImGui to v1.90
    • We also merged in the new Shadows branch to add pretty shadows to all windows
  • Lots and lots of UI improvements
    • Replaced many info and error popup modals with toasts
  • Lots and lots of internal rewrites, restructures and refactors
    • Most of these changes aren't user-facing, however they made many systems much more stable so they won't break as easily anymore in the future
  • Scrolling in the hex editor now works much nicer
    • A entire 64 bit address space can now be displayed on one virtual page without losing precision
  • Drastically improved performance of some background tasks
    • Analyzing data regions and searching through the data will be much faster now
  • Edit -> Jump to can now jump to big and little endian addresses
  • ImHex now supports using integrated GPUs on macOS
  • The Raw Disk Provider now lists all physical drives on Windows and displays more friendly disk names now
  • Default magic database is now bundled with application instead of being part of the content store
  • The ImHex window is now force set to be 100% opaque which should fix issues where the window is partially transparent on some GPUs
  • Newly opened windows are now automatically docked instead of floating around
  • Improved "Unsaved Changes" popup that shows up when closing unsaved providers
  • Zeros in the HTML formatted data are now grayed out
  • Shift-Backspace now works in the pattern editor
  • The color picker tool is much more useful now
    • Added support for outputting colors in many different bit layouts with a specifyable amount of bits
    • Added displaying of the name of the selected color
  • Fixed docking two tool windows to each other making both disappear
  • Files that are inside of subfolders now display their relative path in the file chooser popup
  • Advanced provider settings (when available) are now part of the sidebar
  • Hovering over a color in the Theme Manager now flashes that color in yellow in the UI
  • CRC32 now uses reflected version by default as that is the standard. Thanks to @qux-bbb
  • Many tables now refuse to collapse to zero-height
  • Glyphs in the font atlas are now packed more efficiently so GPUs won't reject the texture as often anymore
  • Bookmark addresses can now be changed in the UI after creating them
  • The hex editor's footer is now collapsible
  • More popups can now be closed by pressing Escape
  • ImHex now tries to only render frames when it has to, saving more system resources
  • Fixed some issues where settings might be reset in rare cases

Bug Fixes

  • Fixed issue where no provider was being selected when closing a provider in some cases
  • Fixed console opening and not disappearing when using the Windows Terminal
  • Moving windows that overlap with the main window title bar no longer move the main window
  • Popups that are not visible on the screen anymore are now properly reset back to the center
  • Hovering over a provider tab always showed information about the current provider
  • Fixed a crash when opening invalid files through the CLI
  • Fixed achievement triggering every single time a file was opened through the CLI
  • Fixed issues where the recursion check in the data processor triggered too early
  • Fixed data processor workspaces not always loading correctly from a project file
  • Fixed issues where the native scaling of ImHex was way too small
  • Fixed modifying bytes sometimes get populated with incorrect values
  • Fixed binary pattern search being broken with alignments greater than 1
  • Fixed file picker not handling supported extensions correctly
  • Fixed crash when using a too large column count in the hex editor
  • Fixed issues with unary operators when evaluating mathematical expressions
  • Fixed out-of-bounds reads when opening a zero-sized file
  • Fixed highlight colors of bookmarks in the hex editor not changing when updating the bookmark's color
  • Fixed opening files with non-ASCII file paths from the command line
  • Fixed numeric search tool not displaying values in the correct endianess
  • Fixed diffing view highlighting not working correctly with a custom base address

Pattern Language

  • Ongoing: Big parts of the Pattern Language are currently being rewritten in order to drastically improve usability, speed and reliability
  • Added support for writing back to the data source
    • Adding #pragma allow_edits and then just assigning to a placed variable will now modify the analyzed data
  • Added support for decompressing data
  • Pattern non-type template parameters are no longer added to the output
  • Fixed std::math::atan2 not being registered correctly
  • Fixed a bunch of other issues

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

GitHub donate button Patreon donate button

Read more

Command Line Interface, .NET scripts, Achievements

24 Sep 18:52
Compare
Choose a tag to compare

Additions

  • Added a command line interface to ImHex. Huge thanks to @iTrooz
    • Get started by typing imhex --help
  • Added initial support for .NET scripts
    • These scripts are meant to be a cross-platform way of performing automated actions.
    • They cannot be used to add new features like native plugins can
    • Special thanks to @PerikiyoXD for some really involved fixes around this
  • Added Achievements
    • These are meant to provide an easy and fun way to learn and get used to ImHex
    • The achievement window can be opened by going to Extras -> Achievement
    • If you don't like the achievements and just want to use ImHex like before, open the achievements window and disable the popups there
  • Added a new and much nicer splash screen
  • Allow memory files to be saved to project files and be renamed
    • Files can also be converted to memory files now
  • Added support for hashing arbitrary strings using the hashes view
  • Added built-in logging console
  • Allow hex editor data visualizers to be switched to big-endian mode
  • Upgraded to Capstone V5 finally
  • Encoding names are now being displayed in the header of the hex editor
  • Added a "Update All" button to the content store
  • Linux now uses the GTK filepicker whenever possible
    • This should correct issues where the file picker didn't work correctly on some Linux systems by default
    • The AppImage and Flatpak still use the Portals filepicker because it's necessary there
  • The hex editor editing mode is now being entered when pressing Enter
  • Added a setting to remember the current main window size and position
  • Added option to fill a selected region with bytes
  • Added option to switch between human-readable sizes and bytes in the hex editor footer. Thanks to @LennardF1989
  • Removed Anonfiles file uploader. Rest in Peace 鉁濓笍
  • Added windo actions popup when clicking on the header icon
  • Added authors and descriptions to things in the content store
  • Added shortcuts to switch between providers, evaluate patterns and interact with the pattern debugger

Improvements

  • Improved the data information diagrams look and field
  • Multi-window support is now being disabled properly by default on Linux
  • Plugins are now being loaded asynchronously to improve startup times
  • Pattern console is automatically scrolled to the bottom now when new lines are being added
  • Unidentifiable data is being handled better now in the data information view
  • Allow hex editor view to be scrolled slightly past the end
  • Made demangler results selectable and copyable
  • Timestamp of files is being updated correctly now on Windows. Thanks to @lorsanta
  • ImHex should now exit cleanly when crashing
  • Bytes per row count setting in the hex editor is being remembered now. Thanks to @LennardF1989

Bug Fixes

  • Fixed raw disk provider not working correctly on non-windows platforms. Thanks a lot to @Nowilltolife
  • Fixed disassembler view not clearning selection when typing in the region field
  • Fixed page count displaying wrongly in empty files
  • Fixed crash when trying to paste bytes without a selection
  • Fixed occasional crash when evaluating patterns
  • Fixed scaling not being applied properly in some cases
  • Fixed bookmarks not being loaded correctly from project files
  • Fixed menu bar being scrollable sideways
  • Fixed loading projects when an existing project is loaded already
  • Fixed issues where the cursor started flickering when hovering certain elements
  • Fixed crash when clicking on "Open in new view" in a bookmark
  • Fixed occasional crash when loading incorrect data processor node files
  • Fixed writing to non-zero pages in the hex editor when a custom base address has been set
  • Fixed issue where libmagic dumped a bunch of compiled files into the cwd on Linux and macOS. Thanks to @iTrooz
  • Fixed endianess of all CRC hashes
  • Fixed highest/lowest entropy block address in the data information view being wrong
  • Fixed issue where downloading items from the store was suceptible for path traversal. Thanks to @iTrooz
  • Fixed various data processor issues

Pattern Language

  • Added typenameof operator
  • Added [[hex::favorite]] attribute to mark patterns as favorites directly
  • Added [[hex::group]] attribute to add patterns to custom groups in the pattern data view
  • Added single-stepping feature to pattern debugger
  • Added coordinates visualizer
  • Added timestamp visualizer
  • Images in the pattern image and bitmap visualizer can now be scaled
  • Added various new inline visualizers such as "color", "guage" and "button"
  • Format functions are no longer being evaluated during highlighting
  • Sections without a name are being hidden now and treated as "internal" sections
  • Added [[hex::spec_name]] attribute to document names for pattern variables taken from the documentation
  • Added string in/out variables
  • Fixed issue where pattern local variables sometimes allocated huge amounts of memory

image


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

Font loading and favorite pattern fixes

24 Jun 15:47
Compare
Choose a tag to compare

Improvements

  • The Accept Pattern popup can now be closed using Escape

Bug Fixes

  • Fixed an issue that caused the unifont font to not be loaded correctly causing mainly asian languages to not display correctly
  • Fixed a rendering issue with the entropy and byte type graph
  • Fixed hex editor hovering tooltips of large arrays causing ImHex to lag a lot
  • Fixed favorites loading in large patterns causing ImHex to freeze

Previous Release

Additions

  • Added option to export generated pattern data
    • This allows you to export your current patterns as JSON, YAML and HTML
  • Added a debugger to debug your pattern code
    • This allows setting breakpoints, halting the execution and inspecting the value of variables
  • Added option to upload crash logs to help us fix issues more quickly. Huge thanks to @Nowilltolife
  • Added optional usage statistics reporting. Huge thanks to @Nowilltolife
  • Added provider tab right click menu with provider-specific options
    • The file provider for example has a option to open the file location in the explorer or open the file in an external editor
  • Recent providers can now be removed from the list in the welcome screen by right clicking them and selecting "Remove". Thanks to @iTrooz
  • Added support for changing the hex editor page size
  • Opened projects are now being saved to the recent entries
  • Added a native error message when the GLFW fails to be created. Thanks to @iTrooz
  • Added a replace feature to the find view
  • Added advanced provider information when hovering over its tab and holding down SHIFT
  • Updated ImGui and its extension libraries to the newest versions. Thanks a lot to @iTrooz
  • Added filter option to the pattern data view
  • Added support for marking specific patterns in the pattern data view as favorite
  • The pattern editor console can now be resized and text in it can be selected and copied
  • Pattern language console log is now always printed immediately
  • The Offset column in the pattern data view has been split into a Start and End column

Improvements

  • The files in the file chooser popup now appear in alphabetical order
  • Themes can now make use of Windows's acrylic blur window background
  • Drastically improved crash backup and restore logic
  • Additional title bar buttons are now being displayed when not running in borderless window mode. Thanks to @iTrooz
  • Drastically improved loading times for custom encoding files
  • Projects that fail to load now display a detailed error message. Thanks to @iTrooz
  • Drastically improve usefulnes of stacktraces, especially on Windows.

Bug Fixes

  • Fixed rendering issues with custom encodings. Thanks a lot to @shenlebantongying
  • Entropy and byte type distribution graph now always fill out the entire diagram width
  • Fixed issue where view-sepecific shortcuts would get applied globally
  • Fixed issue where ranges found by find view were not being highlighted
  • Fixed invalid key code error being spammed in the console
  • Fixed a crash when sorting the value column in the pattern data view
  • Fixed issues where the intel hex provider didn't display any data
  • Fixed an issue where projects couldn't be saved if the current provider wasn't writable
  • Fixed commit hash and branch not being displayed correctly in various places

Pattern Language

  • Added #pragma magic to automatically load patterns based on a sequence of bytes at a specific location in the data instead of using MIME types
  • Added a new hex_viewer visualizer
  • Added the [[export]] attribute to display pattern local variable in the pattern data view
  • Massively improved handling of local variables
    • Variables used in functions, function parameters and pattern local variables should now behave a lot more like you'd expect
  • Fixed issues with the pattern 3D visualizer calculating normal vectors incorrectly. Thanks to @paxcut
  • Fixed issue where loops and conditionals increased the parent stack
  • Fixed a crash when pragmas didn't end with a new line
  • Fixed static arrays displaying the same value for all entries
  • Fixed handling of return statements in global scope

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 debugger, [[export]]ing local patterns, pattern data view improvements

24 Jun 10:29
Compare
Choose a tag to compare

Additions

  • Added option to export generated pattern data
    • This allows you to export your current patterns as JSON, YAML and HTML
  • Added a debugger to debug your pattern code
    • This allows setting breakpoints, halting the execution and inspecting the value of variables
  • Added option to upload crash logs to help us fix issues more quickly. Huge thanks to @Nowilltolife
  • Added optional usage statistics reporting. Huge thanks to @Nowilltolife
  • Added provider tab right click menu with provider-specific options
    • The file provider for example has a option to open the file location in the explorer or open the file in an external editor
  • Recent providers can now be removed from the list in the welcome screen by right clicking them and selecting "Remove". Thanks to @iTrooz
  • Added support for changing the hex editor page size
  • Opened projects are now being saved to the recent entries
  • Added a native error message when the GLFW fails to be created. Thanks to @iTrooz
  • Added a replace feature to the find view
  • Added advanced provider information when hovering over its tab and holding down SHIFT
  • Updated ImGui and its extension libraries to the newest versions. Thanks a lot to @iTrooz
  • Added filter option to the pattern data view
  • Added support for marking specific patterns in the pattern data view as favorite
  • The pattern editor console can now be resized and text in it can be selected and copied
  • Pattern language console log is now always printed immediately
  • The Offset column in the pattern data view has been split into a Start and End column

Improvements

  • The files in the file chooser popup now appear in alphabetical order
  • Themes can now make use of Windows's acrylic blur window background
  • Drastically improved crash backup and restore logic
  • Additional title bar buttons are now being displayed when not running in borderless window mode. Thanks to @iTrooz
  • Drastically improved loading times for custom encoding files
  • Projects that fail to load now display a detailed error message. Thanks to @iTrooz
  • Drastically improve usefulnes of stacktraces, especially on Windows.

Bug Fixes

  • Fixed rendering issues with custom encodings. Thanks a lot to @shenlebantongying
  • Entropy and byte type distribution graph now always fill out the entire diagram width
  • Fixed issue where view-sepecific shortcuts would get applied globally
  • Fixed issue where ranges found by find view were not being highlighted
  • Fixed invalid key code error being spammed in the console
  • Fixed a crash when sorting the value column in the pattern data view
  • Fixed issues where the intel hex provider didn't display any data
  • Fixed an issue where projects couldn't be saved if the current provider wasn't writable
  • Fixed commit hash and branch not being displayed correctly in various places

Pattern Language

  • Added #pragma magic to automatically load patterns based on a sequence of bytes at a specific location in the data instead of using MIME types
  • Added a new hex_viewer visualizer
  • Added the [[export]] attribute to display pattern local variable in the pattern data view
  • Massively improved handling of local variables
    • Variables used in functions, function parameters and pattern local variables should now behave a lot more like you'd expect
  • Fixed issues with the pattern 3D visualizer calculating normal vectors incorrectly. Thanks to @paxcut
  • Fixed issue where loops and conditionals increased the parent stack
  • Fixed a crash when pragmas didn't end with a new line
  • Fixed static arrays displaying the same value for all entries
  • Fixed handling of return statements in global scope

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 layouts, Spanish translation, try-catch statements

21 May 09:01
Compare
Choose a tag to compare

Additions

  • Added support for saving / loading your own Layouts!
  • Added spanish translation. Thanks a lot to @XorTroll
  • Added a network control interface
    • When enabled, external tools can now send commands to ImHex over a TCP Socket
  • Added non-ranged and aligned value search to find view
  • Added a Documentation helper AI window where you can ask questions about ImHex and the Pattern Language
  • Added selection range radio button to various views to allow specifying of exact start/end addresses
  • Added a button to restore default layout when no views are open
  • Opening .hexproj files through the File -> Open menu now opens them as Projects instead of as Files
  • Names and Values in the pattern data view now display tooltips when hovering over them if they're too long
  • Added bit and byte reversal nodes to the data processor. Thanks to @Nowilltolife
  • Drastically improve the usefulness of the IEEE754 tool. Massive thanks to @paxcut

Improvements

  • ImHex now tries its best to not keep any file handles around
    • This should allow opening files in other tools while they're already open inside of ImHex.
    • For this to work, the other tool needs to support sharing the file though.
  • Some things that didn't really fit in the Help menu have been moved to the new Extras menu
  • Many things that accessed file data are now significantly faster
  • Files in the file chooser popup can now be opened by double clicking them
  • Greatly improved how popups are being handled
  • Pins in the data processor are more visible now
  • Buttons in the bookmarks view now have tooltips
  • ImHex's FPS limit now better follows the setting
  • ImHex now shows an error message when it can't open files. Thanks to @iTrooz
  • Pattern highlighting is now being generated much more quickly
  • About page is now resizable
  • Diff table is now being cleared properly when providers are closed
  • MacOS should now be able to use the Open With dialog to open a file with ImHex
  • Patterns that are empty can no longer be saved
  • Patterns are now being automatically re-evaluated when code sync is on and the provider is being changed
  • Fixed issue where the cursor icon sometimes got stuck on Windows

Bug Fixes

  • Fixed crash when trying to place patterns through the Edit menu
  • Fixed issue where Disassembler names didn't correspond to the correct architecture
  • Fixed occasional crashes when opening project files
  • Fixed a bug where the last line of patterns went missing when saving / reloading them
  • Multi-window support is now disabled by default on Linux as it doesn't work well. It can still be enabled in the settings.
  • Fixed issue where some shortcuts triggered twice
  • Fixed commit link in about page not working correctly
  • Fixed provider undo stack not working correctly
  • Fixed crash when patterns are being evaluated to quickly in succession
  • Fixed project files failing to save when custom encodings are loaded
  • Fixed issue where ImHex sometimes dumped a bunch of compiled magic files into the user's current directory
  • Fixed a crash when closing providers too quickly
  • Fixed Copy-As options not being disabled correctly in some cases
  • Fixed issue where editing a hex cell sometimes had the wrong value in it

Pattern Language

  • Added try-catch statements
  • Added std::math::exp()
  • The std::file functions can now write entire patterns to a file instead of just strings
  • Ternary operators now correctly short-circuit
  • Fixed use of templates in pointer sizes
  • Fixed tons and tons of bugs

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

GitHub donate button Patreon donate button PayPal donate button

`match` statements, `bitfield` improvements, custom themes

04 Apr 11:56
Compare
Choose a tag to compare

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

Text Editor improvements, bug fixes

15 Feb 09:02
Compare
Choose a tag to compare

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

Pattern Visualizers, better data processor

12 Feb 20:17
Compare
Choose a tag to compare

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

Actually fix startup issues

05 Jan 15:57
Compare
Choose a tag to compare

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