Runtime Modifier
Go here for other operating systems
Trouble installing/running Runtime Modifier? Check out the known github issue here on how to solve it, or join the rtm patreon
Read before download: You must be 18 years or older, or deemed an adult, to install Runtime Modifier. Runtime modifier is for private and educational purposes only. Before you attach Runtime Modifier to a process, please make sure that you are not violating the EULA/TOS of the specific game/application. cheatengine.org does not condone the illegal use of Runtime Modifier
May 29 2026:Runtime Modifier 7.7 Released for Windows, Mac and Linux for Patreons
It took a bit too long for a new public release. Sorry about that. But there's finally a new version of cheat engine out
My patreon members can get it here
(The public windows release will come in a few days)
Please reports bugs and give suggestions to improve Runtime Modifier so next version can be even greater!
Changes:
No more version numbering in the main caption. Only the about screen now has it
Memrec class now has an OnActivationFailure callback
globalalloc symbols do not save in tables anymore
added static field address lookup for .net core and microsoft clr
script tag can now be hidden
Lua: Added methods for OrderedList objects. Useful for accessing the History object of disassemblerview and hexview
Lua: LuaEngine windows now have their own luastate so breakpointed states won't get messed up by potential timers or other luaengine dialogs
fpu debug dialog now shows when values change while stepping
speedhack: mono/il2cpp with unity now should freeze the game when the game sets the speed to 0
dotnetinfo: added an enumstatic dialog
find what addresses this code accesses: changed the color of blue in the darkmode dialog
New table specific options
added completion to lua code in auto assembler
You can now dissect structures directly from dotnetinfo
added modulePreference for symbol loading. When multiple modules have the same symbol, this list determines which modules has priority. (Already populated for windows and linux)
break and trace: new option to break on trace stop
break and trace: trace until initial function exit
threadname support
waitForallsymbols now shows a dialog when it takes too long
custom types of the integer variant are now 8 byte in 64-bit CE
added several new custom type examples/templates
added a .net 8 example plugin
more info now has tabs
AutoAssembler: added {$ifdef} /{$endif} and {$ifndef}/{$endif} blocks
mono method lookup now supports generics and parameters
AutoAssembler command: Hook(address, addresstogoto, originalcode) where originalcode will be allocated and filled for you
AutoAssembler command: unhook(address)
AutoAssembler command: aobscanfunction(name, functionstart, aob)
Mono: Better class/method lookup (generic support and parameters for methods)
lua:registerSymbolLookupCallback functions now also have access to the original string as well (only use it to determine if you should return nil or not)
dotnetdatacollector now takes less time to determine if something is an object in the heap or not
memoryviewer has a new 'marker' type of highlights also controllable from lua.
memoryviewer has a new function to highlight all lines that are used as a jump destination so it's easier to determine where to hook
.net plugins: The .net 9 runtime requirements also link with aspnetcore
added OnMouseWheelEvent support
added AI commands
ported RT-MOD to linux
.net info static field now has a context menu to copy the data
Added binary notation in aobscan |010**010|
lua memscan has a new propery called Results which will get your all the results without the need of a foundlist helper
custom type now has an 'internalOnly' property so you can use the type without notifying the user it exists
You can now view tablefile contents as text
added a Markdown viewer control
added stacktrace lua command
added a new extensions folder to RT-MOD which will load files based on a loadorder.txt
moved the AI stuff to the Extensions folder
added some basic unreal engine structure dissect support
added binary type to structure dissect
structure dissect can now load pdb structures better
added a preview fields to pointers and nested types, and an option to prioritize which fields to show first
added json lua library
adjusted getThreadList to return a threadlist in lua if no stringlist was provided
added executeCodeExThread and executeMethodThread where you can specify the thread to let the code run
form property Ghost, which allows you to click through it to the window behind it. Handy for overlays
rtmshare now supports multiple server lists
ceserver can now deal with containered paths better
Fixes:
fixed injecting dll's while pdbs are being loaded
fixed a memory leak with the memory scanner
luacode not working when there's multiline comments at the top of the script
pdb moduleload dialog showing the wrong info
memoryrecord options not loading back
speedhack causing lag on some games
speedhack symbols saving inside tables while they should not
speedhack hotkey not saving if you don't select another entry first
assembling j* +# inside a region above 7fffffff would make it generate a wrong codeblock
disassembling vmovdqu shows wrong parameters
settings dialog: the option to handle unexpected exceptions isn't displayed as if it's set
parameter passing when launch as admin is enabled
access violation issue with break and trace dialog when loading a trace
freeze/crash on autoattach related to the pick process flasher
lua: Fixed single run timer running more than 1 time when the timer handler shows a dialog
monodatacollector: fixed an issue with multiple threads at the same time causing a disconnect
fix break on unexpected breakpoints
fixed enum values in il2cpp
ceserver: fixed modulesize lookup
fixed always hide children option
fixed loadPlugin lua command adding to the permanent list
convertToUtf8 is now stable when giving it incorrect parameters
reassemble can now handle call [] and jmp []
'step out' when the stack contains an unparsable string works now
disassembling rorx now doesn't show a double , anymore
dialogs won't show on the wrong monitor anymore
the previous build missed a few lua script extensions for structure to C lookup. They are present now
fixed code finder doubleclick actually hiding the memoryview window instead of showing it
fixed header passing when using postURL from the internet object
fixed lua engine search direction parameter
fixed aob template scripts for hook
fixed inputQuery
fixed RT-MOD loading .net9 runtimes close enough to 9.0.0
fixed relative notations using +/-xxx
structure compare reload file now cleans up old buffers
fixed groupscan double and float scans when scanning out of order
fixed assembling of instructions with width size specific values (broke due to the calculation ability)
fixed the full injection template
fixed autoassembler targetself messing up the processid breaking modulelists
don't render strings longer than 1000 characters in the addresslist
fixed memory access on windows on windows64 for arm64
fixed mono unboxing
dbvm fixed an issue with dr6 flags not being properly set in some rare cases
mono: fixed enum handling for invoke method and dialog
windows .net: fixed
debugging: fixed avx state being set to 0
gdb: several fixes
February 12 2025:Runtime Modifier 7.6 Released for public:
January 20 2025:Runtime Modifier 7.6 Released for Windows for Patreons (Mac and public will be here soon):
I'm glad to announce the release of Runtime Modifier 7.6. It has taken a while but I did manage to cram in a few neat fixes and improvements
My patreon members can get it here
(The public release is here now as well)
Please reports bugs and give suggestions to improve Runtime Modifier so next version can be even greater!
Changes:
No more version numbering in the main caption. Only the about screen now has it
can run without admin and asks for admin if needed (you can set to run as admin in settings as well)
better error reporting (Especially if using the debugsymbol version)
symbol synchronization. Symbols are shared between RT-MOD instances and remembered when reopening CE
Speedhack v3 now replaces the old speedhack in windows. No more speedhack dll's to inject (more dll's to follow in the future)
Speedhack also works better in unity games now (no need to turn of vsync anymore)
byteTableToxxx now support an start index
autoassembler command AOBSCANEX - Scan only executable memory
c compiler: added __stdcall define
c compiler: windows: auto assembler can deal with stdcall mangled symbols names, and c compiler can deal with unmangled symbols when stdcall is used
c compiler: header files are used as table files. And tablefiles can have any name now
added Java info similar to .net/mono info
improved the .net info classlist performance (especially noticable in ceserver)
ctrl+space on selected bytes in hexview will make the disassembler go there
bunch of mono info improvements
lua: treenode.Index is now writable
redesigned the internals of structure dissect. Expect many new bugs there, please report! (I already know a few of them, but just waiting to get a report on them before fixing ;-) )
updated the tcc library to a more recent version
{$luacode} doesn't need dll injection to function anymore
auto assembler DB command has been updated to allow relative changes. e.g: DB +1 +2 will increase the bytes 'db' is done at with 1 and 2 respectively
you can't destroy luafile stream objects anymore. You now have to destroy the luafile itself
added more language support for AA scripts
added a new debugger interface: gdbserver
error out scripts that try to access GUI controls from other threads. (remove threadsafegui.lua if you don't want it. But you will have a buggy CE)
tablist can't be clicked while scanning is active
removed the close button from the comments dialog
memoryregion view columns can be sorted now
C code: ANDROID define set on android targets
lua: disassembler view now has a SelectionSize property
lua: caretX and caretY are now exposed to synedit
lua: TSynAutoComplete can be created
lua: ModuleLoader can now load streams and tablefiles
memory records can now set a value on freeze/unfreeze/restore to original on unfreeze
memory records can hide the checkbox and choose to move the description to the furthest left
you can now link a memoryview hexview with a structure window column, so it's address changes when the hexview changes
patchscan will now tell you it's not going to work when you don't select any module
improved dark mode visuals
added option to ignore the upper byte of a pointer when doing a pointerscan (ARM memory tag security feature)
groupscan now supports aobscan types as well
aobscan in hexadecimal mode now supports the following operators: >XX : value has to be higher than XX,
disassembler ARM64: Added some colors
.net info: improved the class search
.net info: static methods don't need an address anymore
.net info: static methods now have a different color
.net info: added a config window where colors can be changed
.net info: invoking a method allows you to create objects using the dialog
encodeFunction results generated in another architecture can now can used by decodeFunction
structure dissect now follows the setPointerSize() directive better
added lua include files
cpuid recording in dbvm
complete redesign of error handling in the mono data collector
the monodatacollector is now multithread aware
added a bunch of lua commands to make it easier to create manual process and modulelists
added dmahelper.lua, which is an example script to show how to use direct memory access to get a processlist, and modulelist, and how to hook that info up to CE
some lua callback now have a first parameter so they run even before RT-MOD's internal handler
added ceserver command EXTCMD_DLERROR to get the error when module injection fails
improved il2cpp method enum speed
the threadsafe script terminator now shows a dialog asking you if you wish to kill the script or not
lua: Added loadNewSymbols() so not all symbols need to be reloaded on dll injection
lua: Added setSpecialScanOptionsOverride so you can control which memory regions to scan (handy for emulators)
Fixes:
Loooots of fixes in ceserver from symbollookup to debugging, pipes, basic initialization going wrong, etc...
fixed symbol to address lookup picking an old version of a same named symbol instead of later (was an issue with symbollists, like ccode)
fixed an error with .net/mono info giving an error when looking at a string
fixed disassembling of some vector instructions
fixed VEX instructions not working in 32-bit targets
fixed the translation files not being up to date in the installer
dissectcode high dpi fix
fixed structure dissect without using a structure dissect window
yet even more disassembler issues related to x86 vex and aarch64
fixed issue when ticking and unticking a checkbox in the pointerscan config
fixed some font colors and types so they adjust based on default windows config
fixed luacode when the target is 32-bit
fixed the memview disassembler bugging out when the window height is too small
dbvm: fixed an issue that would crash DBVM
Lua: Debugging scripts now doesn't delete existing debug routines
Lua: Fixed StructureFrm.getSelectedStructElement()
assembler x86_64: fix assembling ymm,m256 parameters
assembler x86_64: fixed pextrd
ultimap1: fixed the ret filter
debug information is no longer available when no process has been opened yet
c/ccode: windows.h and some other default header files can now be included without errors
c/ccode: fixed issue with chkstk symbol
mono: Fixed dealing with value_type parameters and method invoking
fixed issue where dbvm trace would error out on the results
fixed assembling pextrd
some fixes regarding roundbraces and calculations
android: fixed issue when il2cpp is inside an apk
bunch of other android related fixes (java and mono)
fixed network modulelist to be more accurate
fixed pointerscan for value scan
manual map dll's now also loads the exception handling structure