Releases: WerWolv/ImHex
Data processor improvements, variable placements inside of structs, Japanese translation
Changelog
Addition
- Added better help messages for when Plugins are missing or outdated
- Added German translation to the Windows plugin
- Added Japanese translation. Thanks a lot to @gnuhead-chieb
- Added highlighting to matched yara rules
Data processor
- Added Digram, Layered Distribution, Byte Distribution and Image visualizer nodes to the data processor
- Added selected region node
Pattern Language
- Improved integer literal parsing, added hex-representation of floats
- Allow assigning to global variables inside of structs
- Allow variable placements inside of structs. This is especially useful for calculated pointers
- Fixed issues with #pragma once and #include
- Added
[[left_to_right]]
and[[right_to_left]]
attribute for bitfields - Added
[[format_entries]]
attribute to add a formatting function to all array entries - Fixed precedence of comparison operators
- Allow patterns with nested children (structs, bitfields, arrays and unions) to be selected by clicking on them in the pattern data view
- Correctly disallow usage of negative values for array and padding sizes
- Fixed control flow statements (return, continue and break) not being applied correctly
- Fixed scopes not always being popped correctly. Thanks to @Diadlo
Improvements
- Massively refactored ImHex.
- The main application is now completely free of any ImHex-related code and purely acts as a loader
- The built-in plugin and libimhex now contain all functionality
- Improved integer parsing in the pattern language
- Drastically improved highlighting performance
- Only show file chooser popup if there's actually files to list
- Disable bookmark toolbar icon if no bytes are selected
- Added a dedicated hex input text box
Bug Fixes
- Fixed strings still being displayed incorrectly in the pattern data view
- Fixed pattern source code being deleted wrongly when switching to a different data provider
- Fixed docking to main window not always working
- Fixed icon being broken on macOS
- Fixed incorrect capstone include path
- Fixed a crash when opening files from the recent files list. Thanks to @Diadlo
- Fixed crash when opening a read only file on Linux. Thanks to @bigfoot547
- Fixed hex editor search popup buttons not working correctly. Thanks to @Diadlo
- Fixed columns in diff view being misaligned. Thanks to @twevs
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Parameter packs, assignment operators and byte inserting
Changelog
Addition
- Added function for inserting bytes in the middle of files
- Added custom encoding files to content store
- ImHex now automatically writes all log output to a file
- Added menu items to save and load data processors
- Added support for copying values from the pattern language console
- Added RISC-V, M68K, M680X, WebAssembly, MOS65XX and BPF architectures to disassembler
Improvements
- Fixed interface being scaled horribly on MacOS
- Updated Italian translation. Thanks a lot to @CrustySean
- Updated Chinese translation. Thanks a lot to @xtexChooser
- Improved how integer values are displayed in the data inspector
- Improved loading of custom encoding files
- Splash screen no longer gets drawn on top of all other windows
- GoTo and Find text boxes are now automatically focused when the window is opened. Execute GoTo or Find function when pressing enter
- Patches that have the same value as the original value are now getting removed
Bug Fixes
- Fixed pasting bytes
- Fixed Flatpak release not working correctly
- Fixed ImHex crashing when exiting
- Fixed many format warnings and security issues
- Fixed jumping to addresses moving hex editor window to wrong offset
- Fixed curl SSL verification on MacOS and Linux
Pattern Language
- Added parameter packs
- This allows passing an unlimited amount of parameters to a function
- All built-in functions have now been to the
builtin
namespace.- This means, to use built-in functions you now need to download and use libstd from the content store and include the correct include file
- Added
[[no_unique_address]]
attribute- Applying this attribute to a variable makes it not increasing the cursor when placing it
- Added ability to assign a value to the dollar operator to change the current cursor
- Added assignment operators (+=, -=, *=, etc)
- Added
#pragma once
directive - Added extra math functions (floor, ceil, round, sin, cos, and more)
- Fixed local variables not respecting their type's size
- Fixed color overriding for arrays and structs
- Fixed [[static]] attribute not correctly optimizing the type
- Fixed
continue
andbreak
statements not working correctly in structs - Fixed highlighting of arrays
- Fixed endian setting applied to structs not applying it to their members correctly
- Fixed strings being displayed wrongly
- Fixed lexing of
sizeof
andaddressof
operator
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
`[[format]]` and function argument fixes
Changelog
Improvements
- Undocked windows now appear in the task bar and the window switching interface
- Improved the look and feel of the hex editor footer bar
Bug Fixes
- Fixed default directories not being created correctly when ImHex launches
- Fixed a crash when closing certain popups such as the about page
Pattern Language
- Improve the memory usage of patterns a bunch. This is not the end yet though
- Fixed various crashes related to passing values and variables to functions
- The
[[format]]
attribute can now be used correctly on custom types such as structs or enums - Limited Pattern Data UI to only display 50 array entries by default.
- If you want to see more, double click on the last entry
- Fixed local variables being able to hold larger values than they should be able to
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Pattern language fixes
Changelog
Bug Fixes
- Fixed passing structs and arrays to custom functions causing their address to be invalid
- Fixed
[[pointer_base]]
attribute placing value at invalid addresses - Fixed settings screen being way too big
- Fixed occasional crash when disassembling files
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Environment values, in/out variables and improvements
Changelog
Additions
- Added global progress bar to show currently running tasks
- This shows all currently running background tasks in one places
- With this, also a bunch of things that previously were running synchronously have now been made asynchronous.
- Added link to Discord server to Welcome screen
- If another ImHex instance is already open on Windows, new files are now automatically opened in that current instance.
- It's still possible to have multiple instances running. Just open a new instance without opening a file through it.
- Added ability to clear the recent files list. Thanks to @draftshade
Pattern Language
- Added a Environment Variables tab to pattern editor view
- Environment variables let you specify a value (string, boolean, integer or float). These values can then be accessed again through the use of
std::env
.
- Environment variables let you specify a value (string, boolean, integer or float). These values can then be accessed again through the use of
- Added in/out variables
in
variables work similar to properties found in e.g Unity. They automatically add an entry with their name to the UI and can be set to some value through the UI. The value will be applied before running the pattern.out
variables work the same but simply display whatever value has been assigned to them once the pattern is done running.
- Dangerous functions such as file IO or HTTP request functions are now gated behind a user confirmation dialog.
- The first time such a function gets called in the current session, a popup will show up asking the user to confirm or deny running the pattern. The user can then either allow all dangerous function for this session or deny it in which case the popup will show up again the next time the function is called. When denying, execution of the current pattern is aborted.
- Added
break
andcontinue
statements- These can be used inside of
for
andwhile
loops but also inside of structs. When an array is created and abreak
statement is hit, the array will stop growing and keep its current size. When acontinue
statement is hit, the current entry will be skipped but the array continues to grow until it reaches the end.
- These can be used inside of
Improvements
- Added better timeouts for all curl code.
- If you don't have an internet connection, ImHex will no longer try to check for updates for ages
- The diff view line spacing is now is the same as the one in the main hex editor view
- Improved how shortcuts are handled within ImHex
Bug Fixes
- Fixed opening files as read-only if user doesn't have write permissions
- Fixed Windows TTY COM Port view
- Fixed restarting of ImHex on Linux Thanks to @qxxxb
- Fixed saving files
- Fixed reading data from huge files
- Fixed pattern language [[color]] attribute not working for arrays and structs
- Fixed IPS patches import and export
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Crash and build fixes
Changelog
Improvements
- Capstone is now bundled with ImHex directly to work around issues with Ubuntu
Bug Fixes
- Fixed AppImages
- Fixed opening zero-sized files
- Fixed crashes when having yara installed on Linux
- Fixed yara rule matching yielding invalid addresses
- Fixed loading a project file crashes ImHex
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
GDB and Raw disk provider
Changelog
Additions
- Added GDB Server data provider
- This allows accessing memory data from running processes, microcontrollers and many other things. ImHex can attach to any running GDB Server over the network
- Added Raw Disk data provider
- This allows accessing raw disk images or partitions of devices connected to your computer
- Pattern Language: Added
std::env
function and a configuration menu for it- This lets you query strings, integers, bools and floats from a list and use them within the script making configuring patterns much easier.
- Added "File -> Save Pattern..." option to save the current pattern language code
Improvements
- Added selection size in hexadecimal to hex editor view
- Redid data provider reading and writing. This should fix many issues with non-zero base addresses or large files with multiple pages
- ImHex now uses the native API to open websites so the command line window doesn't pop up every time you're clicking on a link
- Improved about and settings page
- Added icon to footer when ImHex is being run with Administrator or root permissions
Bug Fixes
- Pattern Language: Fixed variable access inside of pointer pattern yielding invalid results
- Pattern Language: Fixed indexing of static arrays
- Fixed bookmark colors not being saved into projects
- Fixed flickering of the window on Windows if it was full screen
- Fixed window border and shadow rendering on Windows more consistent with other windows
- Fixed cursor not changing to the right resize arrow in the window corners
Rendering issues
If you're on Windows and you're experiencing any rendering or your Computer's or VM's GPU doesn't support OpenGL, download the opengl32.dll file from the releases below and drop it next to the ImHex application. This will cause the entire UI to be software rendered which will be much heavier on your CPU but may allow you to use ImHex at least.
Plugin Development
If you'd like to build a plugin for ImHex, you can do so now easily using the C++ and Rust plugin templates found here:
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
New release packages, many small improvements
Changelog
Additions
- Added new .deb packages
- Added new AppImage packages. Thanks to @wardwouts
- Added number of found strings to string finder view. Thanks to @qdlmcfresh
Improvements
- Improved scaling and font rendering on MacOS. Thanks to @DavidBuchanan314
- ImHex now automatically compiles all magic source files when analyzing a file
Bug Fixes
- Fixed libimhex not being included in any Linux builds
- Fixed diffing view not correctly scrolling all the way down
- Fixed pattern language variable casting incrementing cursor
- Fixed crash when ImHex takes longer than 200ms to draw a frame. Thanks to @wardwouts
Rendering issues
If you're on Windows and you're experiencing any rendering or your Computer's or VM's GPU doesn't support OpenGL, download the opengl32.dll file from the releases below and drop it next to the ImHex application. This will cause the entire UI to be software rendered which will be much heavier on your CPU but may allow you to use ImHex at least.
Plugin Development
If you'd like to build a plugin for ImHex, you can do so now easily using the C++ and Rust plugin templates found here:
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
ImHex is no longer completely unusable everywhere
Documentation
A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!
Changelog
Bug Fixes
- Fixed window being undecorated on all platforms while it should only be undecorated on Windows.
- This caused the window to be unmovable and unresizable on platforms other than Windows
- Fixed crash on Windows when launching ImHex without a terminal window on Windows
I am so sorry for this mess...
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
MacOS support is back, Rust plugins and many many pattern language improvements
Documentation
A new documentation for ImHex (mainly the pattern language right now) is in the works and can be found here: https://imhex.werwolv.net/docs. It is a lot more detailed than the one found on the Wiki here and contains information about all the new features as well. Check it out!
Changelog
Additions
- Added back MacOS support! Huge thanks to @Kuruyia for taking the time to fix it!
- Added basic support to create plugins using Rust instead of C++! Huge thanks to @jam1garner
- Added border around byte selection to make it more visible with other things highlighted
- Put maximum FPS limit to 200, added "Unlocked" option
- Variable names are now displayed when matching yara rules
- Added regex searching to string finder view. Thanks to @qdlmcfresh
Pattern Language
- Added button to stop evaluation prematurely
- Added main function support. If a function called
main
exists, it will automatically be called after all other things have been evaluated. - Added global variables
- Allow functions to be called inside structs
- Added
for
loops - Variables declared in global scope can now be accessed inside custom types.
- Added
padding
expressions in bitfields - Limited maximum number of patterns that can be created. Can be overridden using the
pattern_limit
pragma. - Allow
str
types to be used inside function bodies - Allow pointer endianess to be changed
Standard Library
- Added basic file io built-in functions
Improvements
- Improved the command palette
- Limited numbers of characters being displayed in parsed strings
[[name]]
attribute no longer changes the variable name but only the name displayed in the pattern data view- The pattern code editor now automatically closes
(
,{
,[
,"
and'
Bug fixes
- Fixed titlebar and cursor being misaligned on some computers
- Fixed nothing being printed to console in release mode, even when console is open
- Fixed multi variable declarations sometimes causing crashes
- Fixed endian pragma not working
- Fixed issue where signed integers weren't correctly sign extended
- Fixed null bytes being included in read strings
- Fixed Project file load and save not working correctly
- Fixed incorrect offsets being accessed when passing custom types to functions
- Fixed
color
attribute taking a color value in BGR instead in RGB format - Fixed not all include paths being searched correctly
- Fixed CRC and hash calculations not working properly in all cases. Thanks to @raron for fixing them and writing many unit tests to prevent issues like this in the future
- Fixed bookmarks closing when changing their name
- Fixed ImHex crashing after splash screen if no plugins have been loaded
- Fixed syntax error in code generated "Copy as Rust array" option. Thanks to @paoda
- Fixed string pattern causing crashes when they are empty
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!