Skip to content

v0.8

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Jun 23:07
· 48 commits to master since this release
365586f

Full Changelog: v0.7...v0.8

Please note that due to some code changes in the settings file, we bumped up the settings version which will cause a settings reset on your next boot. Make sure to note down your non-default settings so you can re-apply them.

New Features

  • Speedhack now works on WINE/Proton x86/x64 targets as well, not just native Linux.
    • You can now speed up or slow down WINE/Proton games from the main window or hotkeys, the same way as native targets.
    • No LD_PRELOAD or custom WINE necessary.
    • Only ntdll's RtlQueryPerformanceCounter is hooked. Games reach QueryPerformanceCounter through this entry on both Proton (which computes it inline) and mainline WINE (where it calls into Nt), so scaling it here works on both without double-counting. It's also the one clock WINE never turns into a kernel wait deadline, so scaling it can't make a game hang.
      • Downside: clocks other than QPC aren't scaled, so games that pace off Sleep/GetTickCount/system time won't respond and real-time waits (frame pacing, vsync, audio) stay at normal speed. Slow-motion and high multipliers can feel uneven because of this.
      • If you found a game that does not work with just Rtl hooking and needs Sleep pacing hooking, feel free to open up a discussion thread or issue and we'll see what we can do about it.

Improvements

Speedhack

Pointer Scanner

Injection

  • Reworked dlopen injection to include manual symbol resolution fallback.
    • The injection now falls back to manually resolving dlopen from the target's libc when GDB cannot resolve the symbol (e.g. stripped binaries).
    • Removed the unused "Advanced Injection" placeholder from the Settings dialog as that type of implementation is no longer necessary for ~99% of PINCE use cases (see below).
    • After this change, only statically linked binaries that do not include libc/libdl as shared objects (uncommon) won't be injectable compared to the old logic that would fail on stripped binaries (common). Some examples include:
      • Go binaries that are compiled with CGO_ENABLED=0 (default): fully statically linked, no libc.so in the process maps so no dlopen. This is the most likely case from the uncommon ones.
      • Rust binaries that target x86_64-unknown-linux-musl with static linking: same as above.
      • C/C++ programs with either -static or -static-pie: everything is baked into the binary so dlopen won't exist or be stripped.
      • Static musl builds: common in containers.

Memory Viewer

Debugging

General

Bug Fixes

Memory Viewer

Address Table

Dissect Code

Search Instructions (formerly Search Opcode)

Bookmarks

Session

Memory Regions

Debugging

Scanning

Settings & Hotkeys

Scripting

General

Plus many more non-user facing bug fixes and code hardenings added.