Releases: Curve/lime
Lime v7.0.0
π Changes
-
[𧨠BREAKING] To use the cross-platform entry-point, explicitly set
lime_entrypointto one of the following:PlatformStatic
-
[𧨠BREAKING] Overhauled
lime::address- Renamed
address::addr()toaddress::value() - Added
address::ptr(),address::mut_ptr() - Added
address::as<T>(),address::as_mut<T>() - Made
writetakestd::span<const std::uint8_t>
- Renamed
-
[𧨠BREAKING] Overhauled
lime::hook- Refactored and simplified calling-convention related code
- It is also possible to extend the built-in calling conventions (specialize
lime::utils::convention_traits)
- It is also possible to extend the built-in calling conventions (specialize
- Added
hook::reset()convenience function - Simplified
make_hook - Relaxed restrictions on callables
- Refactored and simplified calling-convention related code
-
[𧨠BREAKING] Overhauled
lime::instruction- Renamed
instruction::addr()toinstruction::address() - Merged
instruction::absoluteintoinstruction::follow- It is now also possible to specify the index of the operand of which to calculate the absolute target
- Return string for
mnemonic - Added
instruction::next(mnemonic) - Return list of possible candidates in
instruction::prev - Removed
instruction::unsafe
- Renamed
-
[𧨠BREAKING] Overhauled
lime::lib(previouslylime::module)-
Merged
lib::find_symbolintolib::symbol
There is now a function overload that takes alime::pattern.Using this overload will find the first symbol which matches the pattern. You can use regular expressions in the pattern by enclosing them in
<and>(e.g.Hello<.*>would matchHelloWorld. You can also escape the angled brackets with a backslash if needed. The pattern will be searched in the source string by default, thusHellowould also find theHelloWorldsymbol in the previous example) -
Added
lime::literals::""_reconvenience literalIs used to construct the aforementioned pattern, e.g.
"Hello<.*>"_re -
Added
lime::patternoverload forlime::lib::find -
Added
operator[]that optionally takes astd::type_identityto automatically cast the result to the desired type (e.g.lib["load", std::type_identity<void(*)(int)>{}]orlib["load", lime::id<void(int), cc_stdcall>]) -
lib::loadnow takes anfs::path
-
-
π
lime::page- Added
page::can(protection)convenience function - Added
page::allow(protection)convenience function - [𧨠BREAKING] Removed
page::unsafe
- Added
-
[𧨠BREAKING] Overhauled
lime::signature- Moved into
limenamespace (was previously inlime::utils) - Construction now happens via constructor instead of factory
- Merged
findandfind_allintofind<signature::results::first>andfind<signature::results::all>
- Moved into
-
[𧨠BREAKING] Overhauled
lime_mingw_generate_proxy- Can now be used as follows:
lime_mingw_generate_proxy( TARGET "${PROJECT_NAME}" DEFINITIONS "${CMAKE_SOURCE_DIR}/exports.lime" # Text file where each export symbol name is listed line by line )
It is also possible to optionally set
NAME "something"(defaultexports) in the call tolime_mingw_generate_proxy. The name will decide the name of the generated namespace and header to be included later (#include <lime/exports.hpp>,lime::exports::init("path-to-original-dll")). - Can now be used as follows:
π Minor Changes
- β»οΈ Cleanup code, make use of C++23
- π¦ Bump dependencies
- βΉοΈ Switched to
vX.X.Xversion scheme
Warning
This update raises the minimum required C++ version to 23
Lime v6.0
π Minor Changes
-
π§ͺ Update Tests
- MinGW builds are now tested with Wine
- All Windows Targets are now tested
- Added CTest Target
-
π¦ Remove some dependencies
-
π Signature Scanner
- Protection now defaults to
read - Updated Conversion
- Protection now defaults to
-
βοΈ Toolchain now static links by default
-
β¨οΈ Instruction
- Improved
prevaccuracy
- Improved
-
π§Ή Code Cleanup
π Bug Fixes
-
πͺ Hooks
- Use
bit_castfor target / source casting
- Use
-
π Page Utility
- Properly cast limits
Warning
This update raises the minimum required compiler versions to those that implement P2210R2
Lime v5.0
π΅ New Features
-
πͺ Hooks
- Full rework, add support for more relocations
-
π Instruction / Address Utility
- [𧨠BREAKING] Remove implicit conversion operators
-
π Instruction Utility
- Add
absolute() - Allow to specify RIP for
follow()
- Add
π Minor Changes
- π§ͺ Update Tests
- π¦ Bump Dependencies
π Bug Fixes
-
πͺ Hooks
- Numerous fixes for relocations and x86 (!)
- Destructor on invalid state
- Require Target-Page to be at least readable
-
π Page Utility
- Nearby Allocation on x86 (!)
Lime v4.0
Lime v3.1
Lime v3.0
π΅ New Features
-
π Proxy
- Use
lime::module - Move into
lime::proxynamespace [𧨠BREAKING]
- Use
-
π¦ Module
- (Windows) Calculate total amount of loaded modules instead of relying on large upper limit
-
π Page
- Always return latter page when two pages with overlapping address-space exist
-
βοΈ General
- More wide-spread usage of
std::string_view
- More wide-spread usage of
-
π§ͺ Test-Suite
- Add more test-cases
π Bug Fixes
- π Instruction
prev()now correctly determines the previous instruction
Lime v2.4
Lime v2.3
π΅New Features
- Add proxy dll generation helper for MinGW
-
Requires the user to specify a file "exports":
symbol_to_export=Ordinal another_symbol_to_exportWhich can then be used to generate headers & definition files:
lime_mingw_generate_proxy(${PROJECT_NAME} "<path/to/exports/file>")
To setup the proxy functions include
<exports.hpp>and calllime::setup_proxy(path_to_original_dll);[!NOTE]
When working with c strings you might need to explicitly specify the char type to be used, i.e.lime::setup_proxy<char>(...)
-
π Bug Fixes
- Link required libraries on Windows
- Windows/MinGW detection in entry-point
ποΈ Minor Changes
- Code Refactor
- Use Boost::ut over Catch2