An audit pass over every source file. 1.10.0 carried the same signature and build fixes, but answered the readmem defect with a warning comment instead of fixing it. Use this one.
๐ The signature could verify fewer bytes than the script overwrote
The pattern starts at the anchor, the patch starts at the injection point. With an anchor two bytes ahead, an 18 byte pattern only reached address+16 โ two overwritten bytes were never checked. aobscanfunction confirmed the match, then jmp far wrote past what had been confirmed. On a match whose first bytes agree and whose following bytes do not, that corrupts unrelated code.
The bound is now an absolute end address, so it holds whatever anchor the builder settles on.
๐ The 32 bit build did not compile at all
Release|Win32 and Debug|Win32 were broken. On 32 bit, SIZE_T and size_t are distinct types, so std::min could not deduce in the scanner. All four configurations now build clean, with no warnings.
The plugin is still a single 64 bit DLL. It loads into Cheat Engine, not into the target, and picks its decoder per process โ a 32 bit game under 64 bit Cheat Engine is handled by
IsWow64Process, as before.
๐ readmem no longer copies position dependent code
A call rel32 or a RIP relative operand measures its distance from where it sits. Copied verbatim into newmem, it resolves somewhere else โ the script assembles, the injection looks fine, and the call lands in the wrong place.
Those instructions are now emitted as reassemble() so Cheat Engine recomputes the displacement, and the rest stays a single readmem run:
code:
// 140001000: call 0x0000000140001005
// 140001005: mov rax, rcx
reassemble(INJECT)
readmem(INJECT+5,9)
jmp return
Code with nothing relative in it produces exactly the line it always did.
Also fixed
- โ๏ธ
collect_stolenstole across theint 3padding into the next function - ๐ท๏ธ
[DISABLE]names the symbols it takes down instead of clearing everythingunregistersymbol(*)anddealloc(*)reach - ๐ the signature now says whether uniqueness holds module wide or inside the enclosing function only โ the two acceptance paths checked different scopes and neither reported which
- ๐พ
SigMaker.iniwas silently discarded when the DLL sat in a folder that is not writable, such as Program Files; it falls back to the roaming app data folder - ๐ช the generator dialog leaked its window on
WM_QUIT, and the message pump could spin on a destroyed window; the window class is now unregistered with the plugin - ๐งฑ Zydis is compiled from the project folder only โ the build pulled the implementation from outside the repository while the sources included the copy in the root
๐งช Tests
tests/ added, with 30 checks against synthetic memory that run without Cheat Engine. Covers both signature defects, the scan chunk boundaries, the int 3 stop, the readmem split, and 37 instruction forms in 64 and 32 bit for the position dependence check.
Download SigMakerPlugin 1.10.1.zip โ it carries LICENSE and THIRD_PARTY.md next to the DLL, which the MIT licence of the bundled Zydis requires for binary distribution. The bare DLL is attached for convenience.