# fmemory

> A simple node add-on for reading and writing memory on Linux, powered by gmem.

Latest version **0.1.2** (published 2025-03-24) · MIT license · 0 weekly downloads

## Install

```sh
npm install fmemory
pnpm add fmemory
yarn add fmemory
bun add fmemory
```

## Health

**Score 25/100 (F)** — status: maintenance-mode.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2025-03-24 |
| First published | 2020-04-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 21.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | yes |
| Author | otvv |
| Maintainers | otvv |
| Keywords | gmem, fmemory, memory, gnu, linux, read, write, cheats, hacks |

## Links

- npm: https://www.npmjs.com/package/fmemory
- npm.io page: https://npm.io/package/fmemory

## Dependencies (2)

- [cmake-js](https://npm.io/package/cmake-js.md) ^7.2.1
- [node-addon-api](https://npm.io/package/node-addon-api.md) ^2.0.2

## Alternatives

- [csv-to-markdown-table](https://npm.io/package/csv-to-markdown-table.md) — 47.0K weekly downloads
- [@sapphire/ratelimits](https://npm.io/package/@sapphire/ratelimits.md) — 4.4K weekly downloads
- [js-csvparser](https://npm.io/package/js-csvparser.md) — 2.0K weekly downloads
- [@adadapted/js-sdk](https://npm.io/package/@adadapted/js-sdk.md) — 251 weekly downloads
- [@grapecity/spread-sheets-sparklines](https://npm.io/package/@grapecity/spread-sheets-sparklines.md) — 103 weekly downloads

## Recent versions

- 0.1.2 (latest) — 2025-03-24
- 0.1.0 — 2023-05-02
- 0.0.8-1 — 2023-05-02
- 0.0.8 — 2023-05-01
- 0.0.7-1 — 2023-03-30
- 0.0.7 — 2023-03-30
- 0.0.6-5 — 2023-02-08
- 0.0.6-4 — 2023-02-08
- 0.0.6-3 — 2023-02-08
- 0.0.6-2 — 2023-02-08
- 0.0.6-1 — 2023-02-08
- 0.0.6 — 2023-02-08
- 0.0.4 — 2021-09-07
- 0.0.3 — 2020-11-19
- 0.0.2-6 — 2020-07-13
- … 7 more at https://npm.io/package/fmemory/versions

## README

# fmemory [![codacy badge](https://app.codacy.com/project/badge/Grade/ce5ae034b28843f08eb76d7103787946 "codacy badge")](https://www.codacy.com/gh/otvv/fmemory/dashboard?utm_source=github.com&utm_medium=referral&utm_content=otvv/fmemory&utm_campaign=Badge_Grade)

A simple node add-on powered by [gmem](https://github.com/otvv/gmem) for reading/writing memory in a given process on GNU/Linux.

---

<details>
<summary>more info:</summary>
<h4>features:</h4>
    
    - get process id through process name
    - get module base address through module name
    - memory reading
    - memory writing
  
<h4>todo:</h4>
    
    - get call address of a function
    - vector3d and vector2d support _(read, write)_
    - shellcode execution _(maybe)_
    - high privileges helpers
    - signature reader/scanner

🚧 _more to come.._
</details>

<h4>installing:</h4>

Since this is a Node addon, you'll need `cmake-js`, `node-addon-api`, and a C++ compiler (`GCC` or `clang`).

To install this addon simply type: `npm install fmemory`

_if you get an error related to cmake-js, make sure that node.js is updated to the latest version and also make sure that `cmake-js` is installed globally and `node-addon-api` is installed as well. (It doesnt need to be installed globally)_

<h4>usage:</h4>

The usage is pretty straight-forward.

Here's how:

```javascript
const fmemory = require("fmemory");

const clientStateAddress = 0xDEADBEEF
const deltaTickOffset = 0x123

const main = (() => {
  // get process id
  const processID = fmemory.getProcessID("csgo_linux64")

  // get engine module base address
  const engineModuleBaseAddress = fmemory.getModuleBaseAddr("engine_client.so", processID)
  
  // another way to get the module base address
  // const engineModuleBaseAddress = fmemory.getModuleBaseAddr("engine_client.so", "csgo_linux64") 

  // get client state address
  const pClientState = fmemory.readMemory(engineModuleBaseAddress + clientStateAddress, fmemory.INT)

  if (pClientState) {
    // force update
    fmemory.writeMemory(pClientState + deltaTickOffset, -1 /* <- value */, fmemory.BYTE)
  }
})()
```

_NOTE_: This works with Wine/Proton as well.
_(fmemory still needs improvements on this area, but it works.)_

<h4>documentation:</h4>

When using `writeMemory` or `readMemory` functions, you will need to tell the data type parameter. 

It can either be a `string`:
```javascript
"int32", "uint32", "int64",
"uint64", "long", "ulong", 
"short", "float", "double", 
"byte", "char", "uchar",
"bool" "string", "pointer"
```

Or you can use one of the `constants` provided by the library:
```javascript
fmemory.INT, fmemory.UINT, fmemory.INT64,
fmemory.UINT64, fmemory.LONG, fmemory.ULONG, 
fmemory.SHORT, fmemory.FLOAT, fmemory.DOUBLE,
fmemory.BYTE, fmemory.CHAR, fmemory.UCHAR,
fmemory.BOOL, fmemory.STRING, fmemory.POINTER
```

---

**fmemory** is available under the [MIT License](https://github.com/otvv/fmemory/blob/master/LICENSE)

---
_Source: https://npm.io/package/fmemory · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
