Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here

kotmem

Easy process, module and memory interfacing through Kotlin on the JVM

Subscribe to updates I use kotmem


Statistics on kotmem

Number of watchers on Github 15
Number of open issues 0
Average time to close an issue about 19 hours
Main language Kotlin
Open pull requests 0+
Closed pull requests 0+
Last commit about 3 years ago
Repo Created almost 4 years ago
Repo Last Updated over 1 year ago
Size 69 KB
Organization / Authorjire
Latest Release0.86
Contributors1
Page Updated
Do you use kotmem? Leave a review!
View kotmem activity
View TODOs for kotmem (1)
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating kotmem for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Kotmem

Easy process, module and memory interfacing through Kotlin on the JVM

Build Status Dependency Status license

Gradle

compile 'org.jire.kotmem:Kotmem:0.86'

Maven

<dependency>
  <groupId>org.jire.kotmem</groupId>
  <artifactId>Kotmem</artifactId>
  <version>0.86</version>
</dependency>

One Minute Intro

You can open a process by name:

val process = Processes["just_for_fun.exe"]

Or by ID:

val process = Processes[1337]

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
kotmem list of languages used
More projects by Jire View all
Other projects in Kotlin