|Number of watchers on Github||15|
|Number of open issues||0|
|Average time to close an issue||about 19 hours|
|Open pull requests||0+|
|Closed pull requests||0+|
|Last commit||almost 4 years ago|
|Repo Created||over 4 years ago|
|Repo Last Updated||over 2 years ago|
|Organization / Author||jire|
|Do you use kotmem? Leave a review!|
|View kotmem activity|
|View TODOs for kotmem (1)|
|View on github|
|Fresh, new opensource launches 🚀🚀🚀|
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Easy process, module and memory interfacing through Kotlin on the JVM
<dependency> <groupId>org.jire.kotmem</groupId> <artifactId>Kotmem</artifactId> <version>0.86</version> </dependency>
You can open a process by name:
val process = Processes["just_for_fun.exe"]
Or by ID:
val process = Processes
Now let's use the process to read at some address. Note that the type can't be inferred by the compiler here, it must be explicit in the value declaration.
val cafeBabe: Int = process[0xCAFEBABE]
Here the compiler can infer that the type is
Boolean, thus we can omit.
if (process[0xBADCAFE]) println("We're in a bad cafe!")
We're also able to write at some address. The data argument provides the type thus the type can always be inferred by the compiler.
process[0xBADCAFE] = false
We can resolve a process' module as well. These are cached by name on first call.
val awesomeDLL = process["awesome.dll"]
With the module we are able to query its address
awesomeDLL.address and name
awesomeDLL.name. These are lazily
initiated and are cached once accessed.
We can also use a module to read and write. Doing so will use the module's address as a base and an offset of such is supplied by the user.
val faceFeed: Short = awesomeDLL[0xFACEFEED] awesomeDLL[0xFACEFEED] = faceFeed + 1