Releases: WerWolv/ImHex
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!
Pattern language standard library, file tools and 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 File Utils
- File Shredder: Safely deletes files
- File splitter: Splits a file into multiple smaller files of a given size
- File combiner: Combines multiple smaller files into a single one
- Added custom font size setting
- As this only works for custom fonts, the option is available only by manually editing the
hex.builtin.setting.interface.font_size
setting in the config file
- As this only works for custom fonts, the option is available only by manually editing the
- Added support for include files in Yara Rules
- Pattern Files dropped onto ImHex are now automatically opened in the pattern editor
- Yara rules and magic databases dropped onto ImHex are now copied to their respective folder
Pattern Language
- Added the
auto
datatype for functions to accept any variable type - Added inheritance for structs
- Moved all
std::str
functions tostd::string
since they were not accessible anymore - Comments (
//
,/* */
) and preprocessor directives are now ignored inside strings - Added [[inline]] attribute to allow struct, union and array members to be displayed without adding deeper nesting
- Added [[transform]] attribute to allow modifying the a value before it's being accessed through the dot syntax
- Added [[pointer_base]] attribute to allow making pointers relative from different regions of the file or to calculate a custom offset
- Fixed unary expressions behaving wrong in parenthesis
- Fixed boolean mathematical expressions and cast syntax
- Fixed
std::string::substr
- Fixed enum entry scope resolution
- Fixed accessing strings as rvalues
- Fixed pointer offset calculation
- Fixed recursive types
- Respect endianess when accessing rvalues
- Fixed member access inside of an if body
Standard Library
- The pattern language now has a proper standard library
- Information about all available functions can be found in the documentation
- To use it, please download it from the store or from ImHex's Pattern Repo
- Added
std::http
allowing HTTP GET requests from the pattern language - Added
std::bit
for common bit operatons - Added
C Types
files containing C/C++ type definitions (uint32_t
,float64_t
, etc) - Added
Rust Types
files containing Rust type definitions (i32
,f64
, etc) - Added
std::ctype
to inspect ASCII character traits - Added
std::fxpt
with fixed point number conversion and arithmetic - Added
std::limits
with minimal and maximal values for different data types - Added
std::math
with common math functions - Added
std::ptr
with helper functions for the[[pointer_base]]
attribute - Added additional
std::string
functions. (std::string::parse_int
,std::string::to_string
,std::string::contains
and more)
Improvements
- Improved automatic pattern loading based on the MIME type of the currently loaded data
- This can be turned off in the settings
- Improved Hex editor Find and Goto popup
Bug fixes
- Fixed a major memory leak with Yara Rules
- Fixed new update available popup appearing, even on latest version
- Fixed "File -> Close" option crashing
- Fixed "Open File" shortcut not working
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Evaluator rewrite, diffing view and more
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 support for loading multiple files/data sources simultaneously
- Added Binary Diffing view
- Added
Quit ImHex
option toFile
menu - Added
Follow system theme
option - Added Chinese (Simplified) Localization. Many thanks to @xtexChooser
Pattern Language
- Rewrote entire evaluation engine
- Made Evaluator a lot simpler and faster
- Function parameters now require a type definition
- Strings may now be passed to functions using the
str
type - Added check to prevent huge arrays from being generated (can be overridden with a pragma)
- Added cast expression
- Added
std::format
- It and
std::print
now use libfmt / C++'s std::format syntax
- It and
- Allow passing variables of custom types to functions
- Added multi-variable declaration for functions
- Many more under-the-hood changess
[[format]]
attribute to override the way values are displayed- Added Unit tests
- This will hopefully help with things breaking in the pattern language randomly
- Unnecessary semicolons are now ignored
- Added
std::mem::read_string
built-in function
Improvements
- **On Windows, resources are now placed in the AppData folder in addition to next to the executable``
- Fixed format-security warnings. Thanks to @russkel
- Moved all Hex Editor settings to the settings menu
- Restructured the settings menu into multiple tabs
- Fixed footer items jumping around a lot when updating
- Removed
View
suffix from all View names in the Views menu. Thanks to @xtexChooser - Fixed pattern language evaluator "lagging" behind when Automatic evaluation is active
Bug fixes
- Fixed settings not being initialized correctly sometimes and causing crashes
- No more crashes when settings have been set to invalid values
- Fixed recent files not updating properly
- Fixed Resize File option crashing
- Fixed crash when creating arrays with negative size.
- Fixed
parent
keyword not working correctly - Fixed constants store page not getting cleared correctly on reload
- Fixed feedback button URL
- Fixed padding not working correctly
- Fixed enums not counting properly
- Fixed bitfields not respecting endian setting
- Fixed language selection combo box crashing in some circumstances
- Fixed settings menu closing when changing language
- Fixed Regex replacer tool
- Fixed TTY console crashing if no COM ports are available. Thanks to @xtexChooser
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Pattern language functions, namespaces, optimizations and new views
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
First of all, there has been made some adjustments to the distributed binaries:
- Windows releases are now distributed as an installer and a portable version
- Linux releases are now distributed as a flatpak file and a portable version
- Thanks to @Calinou for the initial work on this
- MacOS support has been dropped because it's impossible for me currently to get it working correctly
- The reason for this is that I have no access to a Mac and development is just frustrating for me
- The previous release was already horribly broken because of that
- If anybody would like to help fix ImHex on MacOS, PRs are highly appreciated.
For people that rather like to build ImHex themselves, there's now a Dockerfile present in the /dist folder of this repository
Additions
- Added a TTY console view (Windows only)
- CTRL + A now selects all bytes in the hex view
- Added default polynomials to CRC16 and CRC32 initially
- Added CPU usage to footer (Windows only)
- Added a new view for looking up common constants
- Added Create new File option
- Added Resize file option
- Added a UNIX permissions calculator tool
- Added a minimap to the data processor nodes editor
- Added crash detection and emergency backups
- If ImHex crashes now, an automatic backup will be created and you will be asked if you want to restore it the next time you open ImHex.
- Got rid of the window border and title bar on Windows and instead use a custom one
- Added a toolbar with buttons
- Added proper interface scaling settings
- Added tips of the day popup at launch
- This can be disabled from the popup or in the settings
- Added a tool to quickly upload files to https://anonfiles.com
- Added a tool to get short definitions of terms from Wikipedia
- Added half floats (16 bit floating point numbers) to data inspector
- Added UTF-8 strings to data inspector
- Added a built-in download "store" for patterns, libraries, magics and constant databases
- The store directly accesses https://github.com/WerWolv/ImHex-Patterns so if you'd like to add more items to the store, please make a PR there
Pattern Language
- Added
while
statements for array definitions - Added
[[hidden]]
attribute to hide a variable from the pattern data view - Fixed the
parent
keyword not working properly - Added ability to declare custom functions
- Allow fields in bitfields to be accessed like struct members
- Added support for namespaces
- Added support for declaring multiple variables on the same line
- e.g
u32 x, y, z;
- e.g
- Moved all built-in functions to the std namespace
- Most functions also got renamed to use snake_case instead
- Fixed endianess setting not applying to
char16
s - Added full unicode support by default
- ImHex now loads unifont on launch
- Optimize arrays of built-in types
- This causes e.g huge byte arrays to not take up nearly as much memory anymore
- The same optimization can be applied to custom structs by marking them with the new
[[static]]
attribute, however this only works correctly if the layout of the struct is actually static.
Improvements
- ImHex now reduces its framerate if there's no events to be processed and doesn't render at all anymore when minimized.
- Allow ImHex to redraw the screen when resizing for a much smoother experience
- Added a nice banner to the welcome screen
- Splash screen, banner and certificates are now embedded into the executable instead of needing to be in the right folder
- ImHex now makes sure that saved project files always have the
.hexproj
extension. Thanks to @jam1garner - Added a bunch of icons to the welcome screen
- The splash screen is now DPI aware
- ImHex now more reliably detects when a file has been modified
- Floats in the data inspector are now displayed in decimal form if they are reasonably close to 0.0 and in scientific notation otherwise. Thanks to @jam1garner
- Drastically improved how bookmarks are displaying bytes
- Added buttons to calculator tool
- Reduced build times of ImHex quite a bit
- Massively improved string search memory usage
- ImHex now searches in the exeutable folder for plugins and resources again on Linux as well as in the system directories
Bug fixes
- Fixed advanced decoding separator in the hex view not respecting horizontal scrolling
- Fixed various issues related to plugin loading
- Fixed keyboard shortcuts not working
- ImHex no longer crashes on every exit
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!
Crash fixes and QoL changes
Changelog
Additions
- Added a list of all paths used by ImHex to the about page to allow locating them easily on platforms with non-default settings
Improvements
- Improve confusing "Quit application" popup text
- Allow using of system libraries during build instead of the bundled ones. Thanks a lot to @Mailaender
- Selecting the "Match Selection" checkbox now correctly updates the current region in the Hash and Disassembler view
- Display correct offsets in hex editor header when base address is not aligned to the number of columns
- The disassembler now always disassembles all selected bytes and inserts
.byte
"instructions" when a opcode couldn't be decoded.
Bug fixes
- Fix crashes when ImHex is installed in a privileged location (e.g C:/Program Files) and is not launched as Administrator
- Fix git commit hash and branch not being displayed properly in Release builds
- Fix broken header text in About popup
- Fix published name of ImHex to show as "Humanity" in Window's Program and Features window
If you like my work, please consider supporting me on GitHub Sponsors, Patreon or PayPal. Thanks a lot!