Skip to content

Releases: Curve/lime

Lime v7.0.0

19 Apr 11:56
28f560e

Choose a tag to compare


v7.0.0


πŸ“„ Changes

  • [🧨 BREAKING] To use the cross-platform entry-point, explicitly set lime_entrypoint to one of the following:

    • Platform
    • Static
  • [🧨 BREAKING] Overhauled lime::address

    • Renamed address::addr() to address::value()
    • Added address::ptr(), address::mut_ptr()
    • Added address::as<T>(), address::as_mut<T>()
    • Made write take std::span<const std::uint8_t>
  • [🧨 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)
    • Added hook::reset() convenience function
    • Simplified make_hook
    • Relaxed restrictions on callables
  • [🧨 BREAKING] Overhauled lime::instruction

    • Renamed instruction::addr() to instruction::address()
    • Merged instruction::absolute into instruction::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
  • [🧨 BREAKING] Overhauled lime::lib (previously lime::module)

    • Merged lib::find_symbol into lib::symbol
      There is now a function overload that takes a lime::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 match HelloWorld. You can also escape the angled brackets with a backslash if needed. The pattern will be searched in the source string by default, thus Hello would also find the HelloWorld symbol in the previous example)

    • Added lime::literals::""_re convenience literal

      Is used to construct the aforementioned pattern, e.g. "Hello<.*>"_re

    • Added lime::pattern overload for lime::lib::find

    • Added operator[] that optionally takes a std::type_identity to automatically cast the result to the desired type (e.g. lib["load", std::type_identity<void(*)(int)>{}] or lib["load", lime::id<void(int), cc_stdcall>])

    • lib::load now takes an fs::path

  • πŸ“ƒ lime::page

    • Added page::can(protection) convenience function
    • Added page::allow(protection) convenience function
    • [🧨 BREAKING] Removed page::unsafe
  • [🧨 BREAKING] Overhauled lime::signature

    • Moved into lime namespace (was previously in lime::utils)
    • Construction now happens via constructor instead of factory
    • Merged find and find_all into find<signature::results::first> and find<signature::results::all>
  • [🧨 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" (default exports) in the call to lime_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")).

🐌 Minor Changes

  • ♻️ Cleanup code, make use of C++23
  • πŸ“¦ Bump dependencies
  • ℹ️ Switched to vX.X.X version scheme

Warning

This update raises the minimum required C++ version to 23

Lime v6.0

22 May 12:10
3df2b67

Choose a tag to compare


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
  • ⛓️ Toolchain now static links by default

  • ⌨️ Instruction

    • Improved prev accuracy
  • 🧹 Code Cleanup

πŸ› Bug Fixes

  • πŸͺ Hooks

    • Use bit_cast for target / source casting
  • πŸ“„ Page Utility

    • Properly cast limits

Warning

This update raises the minimum required compiler versions to those that implement P2210R2

Lime v5.0

13 May 10:43
4b0fc51

Choose a tag to compare


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()

🐌 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

07 May 08:08
1ff782d

Choose a tag to compare


v4.0


🍡 New Features

  • πŸͺ Hook
    • Calling Convention support
    • Refine address concepts
    • No longer accept function pointer-like signatures [🧨 BREAKING]
      • hook<void(*)(int)> should now be hook<void(int)>

🐌 Minor Changes

  • Drop boost-callable-traits dependency

Lime v3.1

05 May 22:20
1415a9a

Choose a tag to compare


v3.1


πŸ› Bug Fixes

  • πŸ“¦ Module
    • (Win32) iterate_symbols should now be more robust

Lime v3.0

10 Jan 00:52
3f80830

Choose a tag to compare


v3.0


🍡 New Features

  • 🌎 Proxy

    • Use lime::module
    • Move into lime::proxy namespace [🧨 BREAKING]
  • πŸ“¦ 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
  • πŸ§ͺ Test-Suite

    • Add more test-cases

πŸ› Bug Fixes

  • πŸ” Instruction
    • prev() now correctly determines the previous instruction

Lime v2.4

03 Jan 11:23
51e59ce

Choose a tag to compare


v2.4


🍡New Features

  • πŸ“¦ Module

    • Add load
  • πŸͺ Hook

    • Improve Concepts
    • Add make_hook to ease hook creation (Can be used to infer signature)
    • Return Hook-Pointer when creating lambda detour

πŸ› Bug Fixes

  • Add Option to disable VirtualAlloc2 because it does not have full feature coverage in Wine

Lime v2.3

04 Dec 08:53
e149eb4

Choose a tag to compare


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_export
      

      Which 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 call lime::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

Lime v2.2

21 Aug 12:35

Choose a tag to compare


v2.2


πŸ—žοΈ Changes

  • πŸ” Use case insensitive lookup for modules on windows

    This follows the behavior of WinAPI functions like GetModuleHandle

  • πŸ› Minor Code-Refactors & Bug Fixes

Lime v2.1

24 Jul 08:56
99d45e5

Choose a tag to compare


v2.1


πŸ—žοΈ Changes

  • πŸ“¦ Update boost-callable-traits to 1.82.0
    • πŸŽ‰ Resolves CMake deprecation warning