libmem


Namelibmem JSON
Version 4.4.0 PyPI version JSON
download
home_pagehttps://github.com/rdbo/libmem
SummaryAdvanced Game Hacking Library (Windows/Linux/FreeBSD)
upload_time2023-12-13 16:46:03
maintainer
docs_urlNone
authorrdbo
requires_python>=3.6
license
keywords gamehacking memory process hooking detouring hacking winapi linux freebsd
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![libmem-logo](https://raw.githubusercontent.com/rdbo/libmem/master/LOGO.png)  
### Advanced Game Hacking Library (C/C++/Rust/Python) (Windows/Linux/FreeBSD)
### Made by rdbo
#  

## Discord Server
https://discord.com/invite/Qw8jsPD99X

## License
This project is licensed under the `GNU AGPLv3.0` (no later versions)

Read `LICENSE` for more information

NOTE: Submodules and external dependencies might have their own licenses! Check for other `LICENSE` files as well.

## Features
- Cross Platform (Windows/Linux/FreeBSD)
- Cross Architecture (x86/x64/ARM/ARM64)

`libmem` can:
- *Find Processes*
- *Find Modules*
- *Find Symbols*
- *Read/Write/Set Memory*
- *Allocate/Protect Memory*
- *Scan Memory by Pattern/Signature*
- *Hook/Unhook Functions*
- *Assemble/Dissassemble Code (JIT)*
- *Do VMT Hooking/Unhooking*
- *Load/Unload Modules*
- *Get Page Information*
- *Enumerate Process Threads*

***And much more!***

## Examples

For more examples and API manual, access the [documentation](https://github.com/rdbo/libmem/blob/master/docs/DOCS.md)

### C/C++
```c
#include <libmem/libmem.h>

int main()
{
	lm_module_t mod;
	lm_address_t main_sym;

	LM_FindModule("mygamemodule.so", &mod);
	main_sym = LM_FindSymbolAddress(&mod, "main");
	printf("[*] Module Name: %s\n", mod.name);
	printf("[*] Module Path: %s\n", mod.path);
	printf("[*] Module Base: %p\n", mod.base);
	printf("[*] Module Size: %p\n", mod.size);
	printf("[*] Module End:  %p\n", mod.end);
	printf("[*] Main Addr:   %p\n"), main_sym);

	return 0;
}
```

### Rust
```rust
use libmem::*;

fn some_function() {
    // ...
}

fn hk_some_function() {
    // ...
}

unsafe fn test() {
    // reading/writing memory
    let number : i32 = 0;
    let number_addr = &number as *const i32 as lm_address_t;
    let value : i32 = 1337;
    LM_WriteMemory(number_addr, &value).unwrap(); // write 1337 to number
    let read_number : i32 = LM_ReadMemory(number_addr).unwrap();
    println!("[*] Number Value: {}", read_number); // it will show 1337

    // hooking/detouring functions
    let func_addr = some_function as *const () as lm_address_t;
    let hk_addr = hk_some_function as *const () as lm_address_t;
    println!("[*] Hooking 'some_function'");
    println!("[*] Original Address: {:#x}", func_addr);

    let trampoline = LM_HookCode(func_addr, hk_addr).unwrap();
    println!("[*] Trampoline: {:#x?}", trampoline);

    some_function(); // this will call 'hk_some_function'

    // restore the original code from 'some_function'
    LM_UnhookCode(some_function_addr, trampoline).unwrap();

    println!("[*] Unhooked 'some_function'");
    some_function(); // call 'some_function' to see if it has been unhooked
}

fn main() {
    unsafe {
        test();
    }
}
```

### Python
```py
from libmem import *

# Assemble/Disassemble code
print("[*] Assembly")
inst = LM_Assemble("mov eax, ebx")
print(f"{code} : {inst.bytes}")

print("[*] Disassembly:")
inst = LM_Disassemble(bytearray(b"\x55"))
print(f"{inst.bytes} : {inst.mnemonic} {inst.op_str}")
```

## CMake Usage (without installing)
Add the following commands to your `CMakeLists.txt`.

They will fetch `libmem-config.cmake` from the root of this repository, which will download libmem binaries for your system and include libmem in your CMake project.

```cmake
include(FetchContent)

# Download and set up libmem
FetchContent_Declare(libmem-config URL "https://raw.githubusercontent.com/rdbo/libmem/config-v1/libmem-config.cmake" DOWNLOAD_NO_EXTRACT TRUE)
FetchContent_MakeAvailable(libmem-config)
set(CMAKE_PREFIX_PATH "${libmem-config_SOURCE_DIR}" "${CMAKE_PREFIX_PATH}")
set(LIBMEM_DOWNLOAD_VERSION "4.4.0")

# Find libmem package
find_package(libmem CONFIG REQUIRED)
```

Use the following to link against libmem (NOTE: it might be necessary to link against other dependencies - go to the `Dependencies` section for more information):
```cmake
# Link against libmem
target_link_libraries(<YOUR_TARGET_NAME> PRIVATE libmem::libmem)
```

## Installing

### Windows
**Note**: If you download a binary version of libmem in the GitHub releases, you only need to install the Windows SDK. Building is not necessary, just add `libmem/include` to your project's include directories and link it against the binary you downloaded.

1. Install the Windows SDK: [Windows 7](https://www.microsoft.com/en-us/download/details.aspx?id=8279) - [Windows 10/11](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/)

2. Install [Python 3](https://python.org/downloads) (Check the option to add Python to PATH) (Use [Python 3.8.9](https://python.org/downloads/release/python-389) for Windows 7)

3. Install [Visual Studio](https://visualstudio.microsoft.com/) 2022 or newer (with C++ support and CMake) (older versions might work, but they were not tested). NOTE: You can install only the Visual Studio Build Tools if you don't want the whole IDE.

4. Install [Git Bash](https://git-scm.com/downloads)

5. Run a Visual Studio `Developer Command Prompt` (or `x64 Native Tools Command Prompt for VS 2022` for 64 bits) as Administrator

6. Run the following command to append libmem's destination directory to your `%PATH%` user variable (**WARNING** - watch for your `%PATH%` size limit!):

        setx PATH "%PATH%;%ProgramFiles%\libmem\include;%ProgramFiles%\libmem\lib"

7. Continue reading at `Build and Install`

### Linux
**Note**: The following commands are for Debian/Ubuntu based distributions. Make sure to find the appropriate commands for your Linux distribution.

1. Open a terminal

2. Install GCC, G++, Git, CMake, Make, Python 3, and the Linux headers:

        sudo apt install gcc g++ git cmake make python3 linux-headers

3. Continue reading at `Build and Install`

### FreeBSD

1. Add a mountpoint for the `procfs` filesystem in your `/etc/fstab` by appending the following line:

        proc		/proc		procfs	rw	0	0

2. Manually mount the `procfs`. This will only be necessary if you don't reboot. If you reboot, it will be automatically mounted because of the line at `/etc/fstab`. Run the following command (as root):

        mount -t procfs proc /proc

3. Install Git, CMake and Python3 (run as root) (clang, clang++ and make should already be installed):

        pkg install git cmake python3

4. Continue reading at `Build and Install`

### Build and Install
**Note**: Run the following commands on Git Bash (Windows) or a terminal (Linux/FreeBSD).

Clone the repository:
```
git clone --recursive --depth 1 https://github.com/rdbo/libmem
```
Generate the CMake cache:
```
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
```

Compile libmem:

*Windows*: `nmake`

*Unix-like*: `make -j 4`

Install libmem (run as root or as Administrator):

*Windows*: `nmake install`

*Unix-like*: `make install`

After installing, follow the the proper `Usage` section for your programming language

## Usage (C/C++)

Add `#include <libmem/libmem.h>` (C/C++) or `#include <libmem/libmem.hpp>` (C++) to your source code.
Link the generated libmem library against your binary (`liblibmem.so` for Unix-like or `libmem.dll` for Windows).
*For GCC-like compilers*: add the flag `-llibmem` to your compiler and it should link it.
```c
#include <libmem/libmem.h> /* C/C++ */
#include <libmem/libmem.hpp> /* Force C++ */
```

## Usage (Rust)
Add the following line to your `Cargo.toml` under `[dependencies]`:
```toml
libmem = "4"
```
Import libmem in your Rust source code:
```rust
use libmem::*;
```

## Usage (Python)
Make sure to have Python >= 3.6 active  
Either install the `libmem` package from PyPi by running the following command:  
```
pip install --upgrade libmem
```
Or build and install it yourself by running the following commands:
```
cd libmem-py
python configure.py
python setup.py install
```
Now to import libmem, just do the following in your Python code:
```py
from libmem import *
```

## Dependencies
All:
- capstone (included in root project)
- keystone (included in root project)
- LIEF (included in root project)
- libstdc++ (used in keystone, LIEF and LLVM)
- libmath (used in keystone)

Windows:  
- Windows SDK (-luser32, -lpsapi, -lntdll) 

Linux/Android:  
- libdl (-ldl)

BSD:  
- libdl (-ldl)  
- libkvm (-lkvm)
- libprocstat (-lprocstat)    
- libelf (-lelf)
  
## API Overview
```
LM_EnumProcesses
LM_GetProcess
LM_GetProcessEx
LM_FindProcess
LM_IsProcessAlive
LM_GetSystemBits

LM_EnumThreads
LM_EnumThreadsEx
LM_GetThread
LM_GetThreadEx
LM_GetThreadProcess

LM_EnumModules
LM_EnumModulesEx
LM_FindModule
LM_FindModuleEx
LM_LoadModule
LM_LoadModuleEx
LM_UnloadModule
LM_UnloadModuleEx

LM_EnumSymbols
LM_FindSymbolAddress
LM_DemangleSymbol
LM_FreeDemangleSymbol
LM_EnumSymbolsDemangled
LM_FindSymbolAddressDemangled

LM_EnumPages
LM_EnumPagesEx
LM_GetPage
LM_GetPageEx

LM_ReadMemory
LM_ReadMemoryEx
LM_WriteMemory
LM_WriteMemoryEx
LM_SetMemory
LM_SetMemoryEx
LM_ProtMemory
LM_ProtMemoryEx
LM_AllocMemory
LM_AllocMemoryEx
LM_FreeMemory
LM_FreeMemoryEx

LM_DataScan
LM_DataScanEx
LM_PatternScan
LM_PatternScanEx
LM_SigScan
LM_SigScanEx

LM_HookCode
LM_HookCodeEx
LM_UnhookCode
LM_UnhookCodeEx

LM_Assemble
LM_AssembleEx
LM_FreeCodeBuffer
LM_Disassemble
LM_DisassembleEx
LM_FreeInstructions
LM_CodeLength
LM_CodeLengthEx

LM_VmtNew
LM_VmtHook
LM_VmtUnhook
LM_VmtGetOriginal
LM_VmtReset
LM_VmtFree
```

## Projects
Made with libmem:  
- [AssaultCube Multihack](https://github.com/rdbo/AssaultCube-Multihack)  
- [X-Inject](https://github.com/rdbo/x-inject)  
- [DirectX9 BaseHook](https://github.com/rdbo/DX9-BaseHook)  
- [DirectX11 BaseHook](https://github.com/rdbo/DX11-BaseHook)  
- [OpenGL BaseHook](https://github.com/rdbo/GL-BaseHook)  
- [Counter-Strike 1.6 BaseHook](https://github.com/rdbo/cstrike-basehook)  
- [Crazymem - NodeJS Memory Library](https://github.com/karliky/Crazymem)  
  

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/rdbo/libmem",
    "name": "libmem",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "gamehacking memory process hooking detouring hacking winapi linux freebsd",
    "author": "rdbo",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/d8/a2/72f0e41a44d0c9c7a1487ff226c1446bef40738a6a50557742e4656312c7/libmem-4.4.0.tar.gz",
    "platform": null,
    "description": "![libmem-logo](https://raw.githubusercontent.com/rdbo/libmem/master/LOGO.png)  \n### Advanced Game Hacking Library (C/C++/Rust/Python) (Windows/Linux/FreeBSD)\n### Made by rdbo\n#  \n\n## Discord Server\nhttps://discord.com/invite/Qw8jsPD99X\n\n## License\nThis project is licensed under the `GNU AGPLv3.0` (no later versions)\n\nRead `LICENSE` for more information\n\nNOTE: Submodules and external dependencies might have their own licenses! Check for other `LICENSE` files as well.\n\n## Features\n- Cross Platform (Windows/Linux/FreeBSD)\n- Cross Architecture (x86/x64/ARM/ARM64)\n\n`libmem` can:\n- *Find Processes*\n- *Find Modules*\n- *Find Symbols*\n- *Read/Write/Set Memory*\n- *Allocate/Protect Memory*\n- *Scan Memory by Pattern/Signature*\n- *Hook/Unhook Functions*\n- *Assemble/Dissassemble Code (JIT)*\n- *Do VMT Hooking/Unhooking*\n- *Load/Unload Modules*\n- *Get Page Information*\n- *Enumerate Process Threads*\n\n***And much more!***\n\n## Examples\n\nFor more examples and API manual, access the [documentation](https://github.com/rdbo/libmem/blob/master/docs/DOCS.md)\n\n### C/C++\n```c\n#include <libmem/libmem.h>\n\nint main()\n{\n\tlm_module_t mod;\n\tlm_address_t main_sym;\n\n\tLM_FindModule(\"mygamemodule.so\", &mod);\n\tmain_sym = LM_FindSymbolAddress(&mod, \"main\");\n\tprintf(\"[*] Module Name: %s\\n\", mod.name);\n\tprintf(\"[*] Module Path: %s\\n\", mod.path);\n\tprintf(\"[*] Module Base: %p\\n\", mod.base);\n\tprintf(\"[*] Module Size: %p\\n\", mod.size);\n\tprintf(\"[*] Module End:  %p\\n\", mod.end);\n\tprintf(\"[*] Main Addr:   %p\\n\"), main_sym);\n\n\treturn 0;\n}\n```\n\n### Rust\n```rust\nuse libmem::*;\n\nfn some_function() {\n    // ...\n}\n\nfn hk_some_function() {\n    // ...\n}\n\nunsafe fn test() {\n    // reading/writing memory\n    let number : i32 = 0;\n    let number_addr = &number as *const i32 as lm_address_t;\n    let value : i32 = 1337;\n    LM_WriteMemory(number_addr, &value).unwrap(); // write 1337 to number\n    let read_number : i32 = LM_ReadMemory(number_addr).unwrap();\n    println!(\"[*] Number Value: {}\", read_number); // it will show 1337\n\n    // hooking/detouring functions\n    let func_addr = some_function as *const () as lm_address_t;\n    let hk_addr = hk_some_function as *const () as lm_address_t;\n    println!(\"[*] Hooking 'some_function'\");\n    println!(\"[*] Original Address: {:#x}\", func_addr);\n\n    let trampoline = LM_HookCode(func_addr, hk_addr).unwrap();\n    println!(\"[*] Trampoline: {:#x?}\", trampoline);\n\n    some_function(); // this will call 'hk_some_function'\n\n    // restore the original code from 'some_function'\n    LM_UnhookCode(some_function_addr, trampoline).unwrap();\n\n    println!(\"[*] Unhooked 'some_function'\");\n    some_function(); // call 'some_function' to see if it has been unhooked\n}\n\nfn main() {\n    unsafe {\n        test();\n    }\n}\n```\n\n### Python\n```py\nfrom libmem import *\n\n# Assemble/Disassemble code\nprint(\"[*] Assembly\")\ninst = LM_Assemble(\"mov eax, ebx\")\nprint(f\"{code} : {inst.bytes}\")\n\nprint(\"[*] Disassembly:\")\ninst = LM_Disassemble(bytearray(b\"\\x55\"))\nprint(f\"{inst.bytes} : {inst.mnemonic} {inst.op_str}\")\n```\n\n## CMake Usage (without installing)\nAdd the following commands to your `CMakeLists.txt`.\n\nThey will fetch `libmem-config.cmake` from the root of this repository, which will download libmem binaries for your system and include libmem in your CMake project.\n\n```cmake\ninclude(FetchContent)\n\n# Download and set up libmem\nFetchContent_Declare(libmem-config URL \"https://raw.githubusercontent.com/rdbo/libmem/config-v1/libmem-config.cmake\" DOWNLOAD_NO_EXTRACT TRUE)\nFetchContent_MakeAvailable(libmem-config)\nset(CMAKE_PREFIX_PATH \"${libmem-config_SOURCE_DIR}\" \"${CMAKE_PREFIX_PATH}\")\nset(LIBMEM_DOWNLOAD_VERSION \"4.4.0\")\n\n# Find libmem package\nfind_package(libmem CONFIG REQUIRED)\n```\n\nUse the following to link against libmem (NOTE: it might be necessary to link against other dependencies - go to the `Dependencies` section for more information):\n```cmake\n# Link against libmem\ntarget_link_libraries(<YOUR_TARGET_NAME> PRIVATE libmem::libmem)\n```\n\n## Installing\n\n### Windows\n**Note**: If you download a binary version of libmem in the GitHub releases, you only need to install the Windows SDK. Building is not necessary, just add `libmem/include` to your project's include directories and link it against the binary you downloaded.\n\n1. Install the Windows SDK: [Windows 7](https://www.microsoft.com/en-us/download/details.aspx?id=8279) - [Windows 10/11](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/)\n\n2. Install [Python 3](https://python.org/downloads) (Check the option to add Python to PATH) (Use [Python 3.8.9](https://python.org/downloads/release/python-389) for Windows 7)\n\n3. Install [Visual Studio](https://visualstudio.microsoft.com/) 2022 or newer (with C++ support and CMake) (older versions might work, but they were not tested). NOTE: You can install only the Visual Studio Build Tools if you don't want the whole IDE.\n\n4. Install [Git Bash](https://git-scm.com/downloads)\n\n5. Run a Visual Studio `Developer Command Prompt` (or `x64 Native Tools Command Prompt for VS 2022` for 64 bits) as Administrator\n\n6. Run the following command to append libmem's destination directory to your `%PATH%` user variable (**WARNING** - watch for your `%PATH%` size limit!):\n\n        setx PATH \"%PATH%;%ProgramFiles%\\libmem\\include;%ProgramFiles%\\libmem\\lib\"\n\n7. Continue reading at `Build and Install`\n\n### Linux\n**Note**: The following commands are for Debian/Ubuntu based distributions. Make sure to find the appropriate commands for your Linux distribution.\n\n1. Open a terminal\n\n2. Install GCC, G++, Git, CMake, Make, Python 3, and the Linux headers:\n\n        sudo apt install gcc g++ git cmake make python3 linux-headers\n\n3. Continue reading at `Build and Install`\n\n### FreeBSD\n\n1. Add a mountpoint for the `procfs` filesystem in your `/etc/fstab` by appending the following line:\n\n        proc\t\t/proc\t\tprocfs\trw\t0\t0\n\n2. Manually mount the `procfs`. This will only be necessary if you don't reboot. If you reboot, it will be automatically mounted because of the line at `/etc/fstab`. Run the following command (as root):\n\n        mount -t procfs proc /proc\n\n3. Install Git, CMake and Python3 (run as root) (clang, clang++ and make should already be installed):\n\n        pkg install git cmake python3\n\n4. Continue reading at `Build and Install`\n\n### Build and Install\n**Note**: Run the following commands on Git Bash (Windows) or a terminal (Linux/FreeBSD).\n\nClone the repository:\n```\ngit clone --recursive --depth 1 https://github.com/rdbo/libmem\n```\nGenerate the CMake cache:\n```\nmkdir build\ncd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\n```\n\nCompile libmem:\n\n*Windows*: `nmake`\n\n*Unix-like*: `make -j 4`\n\nInstall libmem (run as root or as Administrator):\n\n*Windows*: `nmake install`\n\n*Unix-like*: `make install`\n\nAfter installing, follow the the proper `Usage` section for your programming language\n\n## Usage (C/C++)\n\nAdd `#include <libmem/libmem.h>` (C/C++) or `#include <libmem/libmem.hpp>` (C++) to your source code.\nLink the generated libmem library against your binary (`liblibmem.so` for Unix-like or `libmem.dll` for Windows).\n*For GCC-like compilers*: add the flag `-llibmem` to your compiler and it should link it.\n```c\n#include <libmem/libmem.h> /* C/C++ */\n#include <libmem/libmem.hpp> /* Force C++ */\n```\n\n## Usage (Rust)\nAdd the following line to your `Cargo.toml` under `[dependencies]`:\n```toml\nlibmem = \"4\"\n```\nImport libmem in your Rust source code:\n```rust\nuse libmem::*;\n```\n\n## Usage (Python)\nMake sure to have Python >= 3.6 active  \nEither install the `libmem` package from PyPi by running the following command:  \n```\npip install --upgrade libmem\n```\nOr build and install it yourself by running the following commands:\n```\ncd libmem-py\npython configure.py\npython setup.py install\n```\nNow to import libmem, just do the following in your Python code:\n```py\nfrom libmem import *\n```\n\n## Dependencies\nAll:\n- capstone (included in root project)\n- keystone (included in root project)\n- LIEF (included in root project)\n- libstdc++ (used in keystone, LIEF and LLVM)\n- libmath (used in keystone)\n\nWindows:  \n- Windows SDK (-luser32, -lpsapi, -lntdll) \n\nLinux/Android:  \n- libdl (-ldl)\n\nBSD:  \n- libdl (-ldl)  \n- libkvm (-lkvm)\n- libprocstat (-lprocstat)    \n- libelf (-lelf)\n  \n## API Overview\n```\nLM_EnumProcesses\nLM_GetProcess\nLM_GetProcessEx\nLM_FindProcess\nLM_IsProcessAlive\nLM_GetSystemBits\n\nLM_EnumThreads\nLM_EnumThreadsEx\nLM_GetThread\nLM_GetThreadEx\nLM_GetThreadProcess\n\nLM_EnumModules\nLM_EnumModulesEx\nLM_FindModule\nLM_FindModuleEx\nLM_LoadModule\nLM_LoadModuleEx\nLM_UnloadModule\nLM_UnloadModuleEx\n\nLM_EnumSymbols\nLM_FindSymbolAddress\nLM_DemangleSymbol\nLM_FreeDemangleSymbol\nLM_EnumSymbolsDemangled\nLM_FindSymbolAddressDemangled\n\nLM_EnumPages\nLM_EnumPagesEx\nLM_GetPage\nLM_GetPageEx\n\nLM_ReadMemory\nLM_ReadMemoryEx\nLM_WriteMemory\nLM_WriteMemoryEx\nLM_SetMemory\nLM_SetMemoryEx\nLM_ProtMemory\nLM_ProtMemoryEx\nLM_AllocMemory\nLM_AllocMemoryEx\nLM_FreeMemory\nLM_FreeMemoryEx\n\nLM_DataScan\nLM_DataScanEx\nLM_PatternScan\nLM_PatternScanEx\nLM_SigScan\nLM_SigScanEx\n\nLM_HookCode\nLM_HookCodeEx\nLM_UnhookCode\nLM_UnhookCodeEx\n\nLM_Assemble\nLM_AssembleEx\nLM_FreeCodeBuffer\nLM_Disassemble\nLM_DisassembleEx\nLM_FreeInstructions\nLM_CodeLength\nLM_CodeLengthEx\n\nLM_VmtNew\nLM_VmtHook\nLM_VmtUnhook\nLM_VmtGetOriginal\nLM_VmtReset\nLM_VmtFree\n```\n\n## Projects\nMade with libmem:  \n- [AssaultCube Multihack](https://github.com/rdbo/AssaultCube-Multihack)  \n- [X-Inject](https://github.com/rdbo/x-inject)  \n- [DirectX9 BaseHook](https://github.com/rdbo/DX9-BaseHook)  \n- [DirectX11 BaseHook](https://github.com/rdbo/DX11-BaseHook)  \n- [OpenGL BaseHook](https://github.com/rdbo/GL-BaseHook)  \n- [Counter-Strike 1.6 BaseHook](https://github.com/rdbo/cstrike-basehook)  \n- [Crazymem - NodeJS Memory Library](https://github.com/karliky/Crazymem)  \n  \n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Advanced Game Hacking Library (Windows/Linux/FreeBSD)",
    "version": "4.4.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/rdbo/libmem/issues",
        "Discord Server": "https://discord.com/invite/Qw8jsPD99X",
        "Documentation": "https://github.com/rdbo/libmem/blob/master/docs/DOCS.md",
        "Homepage": "https://github.com/rdbo/libmem"
    },
    "split_keywords": [
        "gamehacking",
        "memory",
        "process",
        "hooking",
        "detouring",
        "hacking",
        "winapi",
        "linux",
        "freebsd"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d8a272f0e41a44d0c9c7a1487ff226c1446bef40738a6a50557742e4656312c7",
                "md5": "240bda2ab4ae2f46f6cbed2416052243",
                "sha256": "fe930725c7d733c7c662e4e2d0b83dfb677650b996fb9ffeb2802f6582b9f86a"
            },
            "downloads": -1,
            "filename": "libmem-4.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "240bda2ab4ae2f46f6cbed2416052243",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 17840,
            "upload_time": "2023-12-13T16:46:03",
            "upload_time_iso_8601": "2023-12-13T16:46:03.149021Z",
            "url": "https://files.pythonhosted.org/packages/d8/a2/72f0e41a44d0c9c7a1487ff226c1446bef40738a6a50557742e4656312c7/libmem-4.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-13 16:46:03",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "rdbo",
    "github_project": "libmem",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "libmem"
}
        
Elapsed time: 0.24860s