{"id":25923921,"url":"https://github.com/bloodyboneye/dotnetdatacollectorex","last_synced_at":"2026-04-15T23:33:42.557Z","repository":{"id":279695238,"uuid":"938941133","full_name":"Bloodyboneye/DotNetDataCollectorEx","owner":"Bloodyboneye","description":"An enhanced .NET data collector for Cheat Engine, supporting .NET Framework 4.5+ and .NET Core 3+ / .NET 5+, offering additional features and improved memory analysis.","archived":false,"fork":false,"pushed_at":"2025-02-26T22:01:09.000Z","size":114,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-26T23:18:18.283Z","etag":null,"topics":["cheat-engine","cheatengine-extension","clrmd","debugging-tools","dotnet","dotnet-core","dotnet-debugging","dotnet-framework","dotnet-inspection","dotnet-reverse-engineering","gamehacking","memory-analysis","modding-tools","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bloodyboneye.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-25T18:32:27.000Z","updated_at":"2025-02-26T22:01:47.000Z","dependencies_parsed_at":"2025-02-26T23:28:27.522Z","dependency_job_id":null,"html_url":"https://github.com/Bloodyboneye/DotNetDataCollectorEx","commit_stats":null,"previous_names":["bloodyboneye/dotnetdatacollectorex"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodyboneye%2FDotNetDataCollectorEx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodyboneye%2FDotNetDataCollectorEx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodyboneye%2FDotNetDataCollectorEx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bloodyboneye%2FDotNetDataCollectorEx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bloodyboneye","download_url":"https://codeload.github.com/Bloodyboneye/DotNetDataCollectorEx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241705917,"owners_count":20006399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cheat-engine","cheatengine-extension","clrmd","debugging-tools","dotnet","dotnet-core","dotnet-debugging","dotnet-framework","dotnet-inspection","dotnet-reverse-engineering","gamehacking","memory-analysis","modding-tools","reverse-engineering"],"created_at":"2025-03-03T17:18:55.879Z","updated_at":"2026-04-15T23:33:42.547Z","avatar_url":"https://github.com/Bloodyboneye.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DotNetDataCollectorEx\n\n**DotNetDataCollectorEx** is an extension/replacement to Cheat Engine's **DotNetDataCollector**, designed to work with **.NET Framework 4.5+** and **.NET Core 3+** / **.NET 5+**. It provides some additional features and in some cases more information. It also supports **.NET 8+** which Cheat Engines's **DotNetDataCollector** does not.\n\n**DotNetDataCollectorEx** uses [ClrMD](https://github.com/microsoft/clrmd) to collect information whereas Cheat Engine's **DotNetDataCollector** uses the **.NET Unmanaged API**\n\n## Features\n\n- Support for **.NET Framework 4.5+** and **.NET Core 3+** / **.NET 5+**.\n- Provides, in some cases, more detailed memory analysis and additional functions compared to the legacy **DotNetDataCollector**.\n- Works in both **Replacement Mode** and **Extension Mode**.\n- Can be used dynamically via Lua to replace the legacy **DotNetDataCollector**.\n\n---\n\n## Installation\n\nThere are two installation methods for **DotNetDataCollectorEx**:\n\n### **1. Replacement Mode (Recommended in most cases unless you never or rarely use it for .net8+ targets)**\n\n1. Locate your **Cheat Engine** installation folder.\n2. Rename the existing **DotNetDataCollector32.exe** and **DotNetDataCollector64.exe** to **LegacyDotNetDataCollector32.exe** **LegacyDotNetDataCollector64.exe** respectively.\n  - **DotNetDataCollectorEx** will automatically run `LegacyDotNetDataCollector.exe` for older .NET versions or Versions for which it can't find the DAC.\n4. Copy `DotNetDataCollectorEx32.exe` and `DotNetDataCollectorEx64.exe` into **Cheat Engine's** installation folder and rename them to `DotNetDataCollector32.exe` and `DotNetDataCollector64.exe` respectively.\n5. (OPTIONAL) Copy `DotNetDataCollectorEx.lua` into the `autorun` folder.\n6. Restart **Cheat Engine**.\n\nNow, Cheat Engine will start the **DotNetDataCollectorEx** which will under normal circumstances forward everything to the Legacy DotNetDataCollector unless it can't be used on the target (**.net8+**) or it breaks in which case it will use **DotNetDataCollectorEx**.\nIf you place the `DotNetDataCollectorEx.lua` file into the `autorun` folder then you can also use the Extended functionality in **.net Framework 4.5+** targets.\n\n### **2. Extension Mode (Recommended if you only want the extra functionality or rarely target .net8+ targets)**\n\n1. Keep the existing **DotNetDataCollector.exe's** in place.\n2. Copy `DotNetDataCollectorEx32.exe` and `DotNetDataCollectorEx64.exe` into one of the folders defined in the lua script inside the `processlocations` table.\n   - Default Locations are:\n   - 1. **Cheat Engine** installation folder\n     2. `autorun` folder\n     3. `autorun\\dlls` folder\n   - These can be changed inside the lua Script.\n4. Copy `DotNetDataCollectorEx.lua` into `Cheat Engine\\autorun\\`.\n5. Restart **Cheat Engine**.\n\nIn this mode:\n- **DotNetDataCollectorEx** runs alongside the legacy **DotNetDataCollector**.\n- You can **dynamically replace the legacy collector** later using a Lua function. For more info refer to [this section](#replace-legacy-datacollector-using-lua)\n- If you also want the **symbol handler** and **Data Dissector** to work you should call this lua function [RegisterCallbacks](LUA_API.md#registercallbacksunregister) but this is also explained in [this section](#replace-legacy-datacollector-using-lua)\n\n### **Replace Legacy DataCollector Using Lua**\n- `ReplaceLegacyDataCollector(restore)`\n- A method of the object returned by `getDotNetDataCollectorEx()`.\n- Should only be used/required if you use it in **Extension Mode** and not **Replacement Mode**.\n- Replaces the legacy **DotNetDataCollector** with **DotNetDataCollectorEx** at runtime.\n- Use this function to switch to the new collector for **.NET 8+** applications.\n- If you want to restore the legacy **DotNetDataCollector** you can call this function with `restore` being `true`.\n- Do note that this will only replace it on the **lua side**!\n- If you also want the **symbol handler** and **Data Dissector** to work do this:\n- `RegisterCallbacks(unregister)`\n- A method of the object returned by `getDotNetDataCollectorEx()`.\n- Registers callbacks to make the **symbol handler** and **Data Dissector** work again.\n- Can **only** be used if run in **Extension Mode**!\n- If you want to remove the callbacks again call `RegisterCallbacks(unregister)` with `unregister` being `true`.\n\n- #### Example Usage in Lua:\n```lua\nlocal collectorEx = getDotNetDataCollectorEx()  -- Get the new collector object\ncollectorEx.ReplaceLegacyDataCollector()        -- Replace the old collector with the new one for .NET 8+\n\nif (true) -- Optional. Also register callbacks to make the symbol handler and Data Dissector work again\n  collectorEx.RegisterCallbacks()\nend\n```\n\n---\n\n## Recommended Usage\n\n# Using **DotNetDataCollectorEx** in **Replacement Mode** provides the following benefits:\n- Will by default still use the **Legacy DotNetDataCollector** unless it can't (**.net 8+**) or the **Legacy DotNetDataCollector** breaks.\n- Cheat Engines **Symbol Handler** and **Data Disector** work and provide info even on **.net 8+** targets.\n- Can use extra functions if the `DotNetDataCollectorEx.lua` file is placed inside the `autorun` folder.\n\n# Using **DotNetDataCollectorEx** in **Extension Mode** provides the following benefits:\n- No need to replace exectuables.\n\nIf you want to debug **.NET 8+** applications in **Extension Mode**, then it is **recommended** to call `ReplaceLegacyDataCollector` to replace the legacy collector, as the legacy version does not support **.NET 8+**. This is important because other **Cheat Engine** functionality that relies on **DotNetDataCollector** will only work with **.NET 8+** if you use the new version. These include but are not limited to:\n- The `.net Info` Window\n- `dotnetinterface.lua` used for example for Jitting methods.\n  \nIf you also want Cheat Engines **Symbol Handler** and **Data Disector** to work again also call `RegisterCallbacks`\n\n---\n\n## Limitations and Compatibility\n\n- **Legacy DotNetDataCollector**:\n  - Works for **.NET Framework versions older than 4.5**.\n  - **Does not support .NET 8+**.\n\n- **DotNetDataCollectorEx**:\n  - Supports **.NET Framework 4.5+** and is the only version that supports **.NET 8+**.\n  - Provides, in some cases, more detailed memory analysis and additional features compared to the legacy version.\n\n### Known Limitations:\n- Certain operations may incur slightly higher performance overhead compared to the legacy collector.\n- **DotNetDataCollectorEx** seems to miss some **types(classes)** that Cheat Engine's **DotNetDataCollector** finds. This is as far as I understand because [ClrMD](https://github.com/microsoft/clrmd) is only able to find **constructed types**. Though in **my testing** it found **most** types and **all** that where actually useful to me.\n\n---\n\n## Lua API\nDotNetDataCollectorEx provides additional Lua functions that can be used inside Cheat Engine.  \nFor a full list of available functions and their descriptions, refer to the [Lua API Reference](LUA_API.md).\n\n---\n\n## Building from Source\n\nTo compile **DotNetDataCollectorEx** from source, you will need:\n\n- **.NET 8 SDK** installed on your system  \n- **Visual Studio 2022** (or any other preferred build environment)  \n\n---\n\n### 📌 Building with Visual Studio 2022\n\n1. **Clone the repository**:\n   ```sh\n   git clone https://github.com/Bloodyboneye/DotNetDataCollectorEx\n   cd DotNetDataCollectorEx\n   ```\n\n2. **Open the solution** (`DotNetDataCollectorEx.sln`) in **Visual Studio 2022**.\n\n3. **Select the desired build configuration**:\n   - **Release | x64** for `win-x64`\n   - **Debug | x64** for `win-x64-debug`\n   - **Release | x86** for `win-x86`\n   - **Debug | x86** for `win-x86-debug`\n\n4. **Publish the project**:\n   - Open **Solution Explorer**, right-click the **DotNetDataCollectorEx** project, and select **Publish**.\n   - Choose the desired **publish profile** (`win-x64`, `win-x86`, etc.).\n   - Click **Publish**.\n\n5. **Find the compiled executable** in the respective output directory ([see the table below](#-output-directories))\n\n---\n\n### 📌 Building with Command Line (CLI)\n\n1. **Clone the repository**:\n   ```sh\n   git clone https://github.com/Bloodyboneye/DotNetDataCollectorEx\n   cd DotNetDataCollectorEx\n   ```\n\n2. **Restore dependencies**:\n   ```sh\n   dotnet restore\n   ```\n\n3. **Build and publish** using the desired profile:\n\n   - **Win-x64 (Release)**:\n     ```sh\n     dotnet publish -c Release -r win-x64 --self-contained false -o bin/publish/\n     ```\n   - **Win-x64 (Debug)**:\n     ```sh\n     dotnet publish -c Debug -r win-x64 --self-contained false -o bin/publish/debug/\n     ```\n   - **Win-x64 (Self-Contained)**:\n     ```sh\n     dotnet publish -c Release -r win-x64 --self-contained true -o bin/publish/self-contained/\n     ```\n   - **Win-x86 (Release)**:\n     ```sh\n     dotnet publish -c Release -r win-x86 --self-contained false -o bin/publish/\n     ```\n   - **Win-x86 (Debug)**:\n     ```sh\n     dotnet publish -c Debug -r win-x86 --self-contained false -o bin/publish/debug/\n     ```\n   - **Win-x86 (Self-Contained)**:\n     ```sh\n     dotnet publish -c Release -r win-x86 --self-contained true -o bin/publish/self-contained/\n     ```\n\n---\n\n### 📌 Output Directories\n\n| Publish Profile          | Target Platform | Build Type | Output Directory              |\n|--------------------------|-----------------|------------|-------------------------------|\n| `win-x64`                | x64             | Release    | `bin/publish/`                |\n| `win-x64-debug`          | x64             | Debug      | `bin/publish/debug/`          |\n| `win-x64-selfcontained`  | x64             | Release    | `bin/publish/self-contained/` |\n| `win-x86`                | x86             | Release    | `bin/publish/`                |\n| `win-x86-debug`          | x86             | Debug      | `bin/publish/debug/`          |\n| `win-x86-selfcontained`  | x86             | Release    | `bin/publish/self-contained/` |\n\nAfter publishing, the compiled executables will be named:\n- **`DotNetDataCollectorEx64.exe`** for x64 builds\n- **`DotNetDataCollectorEx32.exe`** for x86 builds\n\n---\n\n### License\n\nThis project is licensed under the **MIT License**. See [LICENSE](LICENSE.txt) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbloodyboneye%2Fdotnetdatacollectorex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbloodyboneye%2Fdotnetdatacollectorex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbloodyboneye%2Fdotnetdatacollectorex/lists"}