{"id":19054836,"url":"https://github.com/zhuagenborn/windows-x86-debugger","last_synced_at":"2025-07-27T07:07:56.239Z","repository":{"id":115570285,"uuid":"428085847","full_name":"Zhuagenborn/Windows-x86-Debugger","owner":"Zhuagenborn","description":"🐞 A simple Windows x86 debugging framework written in C++20 that supports software breakpoints and hardware breakpoints. It can be used to create custom debuggers.（使用C++20开发的简易Windows x86调试框架，支持软件断点和硬件断点，可以用于创建自定义调试器。）","archived":false,"fork":false,"pushed_at":"2025-03-30T04:02:40.000Z","size":96,"stargazers_count":11,"open_issues_count":0,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-06T13:06:23.973Z","etag":null,"topics":["cpp20","debugger","framework","windows"],"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/Zhuagenborn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-11-15T01:28:53.000Z","updated_at":"2025-05-04T12:17:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"229626eb-507e-4599-ac45-0abb0725db2e","html_url":"https://github.com/Zhuagenborn/Windows-x86-Debugger","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Zhuagenborn/Windows-x86-Debugger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhuagenborn%2FWindows-x86-Debugger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhuagenborn%2FWindows-x86-Debugger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhuagenborn%2FWindows-x86-Debugger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhuagenborn%2FWindows-x86-Debugger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zhuagenborn","download_url":"https://codeload.github.com/Zhuagenborn/Windows-x86-Debugger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zhuagenborn%2FWindows-x86-Debugger/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267320256,"owners_count":24068527,"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","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cpp20","debugger","framework","windows"],"created_at":"2024-11-08T23:39:56.395Z","updated_at":"2025-07-27T07:07:56.192Z","avatar_url":"https://github.com/Zhuagenborn.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# *Windows* x86 Debugger\n\n![C++](docs/badges/C++.svg)\n[![CMake](docs/badges/Made-with-CMake.svg)](https://cmake.org)\n[![Visual-Studio](docs/badges/Made-with-Visual-Studio.svg)](https://visualstudio.microsoft.com/)\n[![Windows](docs/badges/Microsoft-Windows.svg)](https://www.microsoft.com/en-ie/windows)\n![License](docs/badges/License-MIT.svg)\n\n## Introduction\n\n![Cover](Cover.png)\n\nA simple ***Windows x86*** debugging framework written in *C++20* that supports software breakpoints and hardware breakpoints. It can be used to create custom debuggers. Some design patterns came from [*GleeBug*](https://github.com/x64dbg/GleeBug).\n\n## Getting Started\n\n### Prerequisites\n\n- Install [*Visual Studio 2022*](https://visualstudio.microsoft.com).\n- Install [*CMake*](https://cmake.org).\n- Set the `PATH` environment variables.\n\n### Building\n\nSet the location to the project folder and run:\n\n```bash\nmkdir -p build\ncd build\ncmake .. -G \"Visual Studio 17 2022\" -A Win32\ncmake --build .\n```\n\n## Usage\n\nUsers can create derived classes inheriting from `Debugger` class and override or implement provided event callbacks.\n\n- `Debugger` does not provide any implementation for event callbacks whose names start with `cb`.\n- `Debugger` provides the basic implementation for event callbacks whose names start with `On`.\n\n```c++\nclass MyDebugger : public Debugger {\nprivate:\n    void cbCreateProcess(const CREATE_PROCESS_DEBUG_INFO\u0026 details,\n                         const Process\u0026 process) override {\n        std::cout \u003c\u003c std::format(\"The process {} has been created.\",\n                                 process.Id())\n                  \u003c\u003c std::endl;\n    }\n\n    void cbExitProcess(const EXIT_PROCESS_DEBUG_INFO\u0026 details,\n                       const Process\u0026 process) override {\n        std::cout \u003c\u003c std::format(\"The process {} has exited.\",\n                                 process.Id())\n                  \u003c\u003c std::endl;\n    }\n};\n```\n\n## Documents\n\nCode comments follow [*Doxygen*](https://www.doxygen.nl) specification.\n\n### Class Diagram\n\n```mermaid\nclassDiagram\n\nnamespace register {\n\n    class RegisterIndex {\n        \u003c\u003cenumeration\u003e\u003e\n        EAX\n        EBX\n        ECX\n        EDX\n    }\n\n    class Register {\n        Set(int)\n        Reset()\n        Get() int\n    }\n\n    class Flag {\n        \u003c\u003cenumeration\u003e\u003e\n        CF\n        AF\n        PF\n        ZF\n    }\n\n    class FlagRegister {\n        SetCF()\n        ResetCF()\n        CF() bool\n    }\n\n    class DebugStatusRegister {\n        SetB0()\n        ResetB0()\n        B0() bool\n    }\n\n    class DebugControlRegister {\n        SetL0()\n        ResetL0()\n        L0() bool\n        SetRW0(val)\n        RW0() int\n    }\n\n    class Registers {\n        Register EAX\n        FlagRegister EFLAGS\n        DebugStatusRegister DR6\n        DebugControlRegister DR7\n    }\n}\n\nRegister --\u003e RegisterIndex\nRegister \u003c|-- FlagRegister\nFlagRegister ..\u003e Flag\nRegister \u003c|-- DebugStatusRegister\nRegister \u003c|-- DebugControlRegister\nRegisters o-- Register\n\nnamespace breakpoint {\n\n    class Breakpoint {\n        int address\n    }\n\n    class HardwareBreakpointSlot {\n        \u003c\u003cenumeration\u003e\u003e\n        DR0\n        DR1\n        DR2\n        DR3\n    }\n\n    class HardwareBreakpointType {\n        \u003c\u003cenumeration\u003e\u003e\n        Execute\n        Write\n        ReadWrite\n    }\n\n    class HardwareBreakpointSize {\n        \u003c\u003cenumeration\u003e\u003e\n        Byte\n        Word\n        Dword\n    }\n\n    class HardwareBreakpoint {\n        HardwareBreakpointSlot slot\n        HardwareBreakpointType access\n        HardwareBreakpointSize size\n    }\n\n    class SoftwareBreakpoint {\n        byte origin\n    }\n}\n\nBreakpoint \u003c|-- HardwareBreakpoint\nHardwareBreakpoint --\u003e HardwareBreakpointSlot\nHardwareBreakpoint --\u003e HardwareBreakpointType\nHardwareBreakpoint --\u003e HardwareBreakpointSize\nBreakpoint \u003c|-- SoftwareBreakpoint\n\nclass Thread {\n    Suspend()\n    Resume()\n    StepInto()\n    SetHardwareBreakpoint(addr, slot, type, size)\n    DeleteHardwareBreakpoint(slot)\n}\n\nThread *-- HardwareBreakpoint\nThread --\u003e Registers\n\nclass Process {\n    Suspend()\n    Resume()\n    FindThread(id) Thread\n    NewThread(thread)\n    RemoveThread(thread)\n    SetSoftwareBreakpoint(addr, callback)\n    DeleteSoftwareBreakpoint(addr)\n    FindSoftwareBreakpoint(addr) SoftwareBreakpoint\n    SetHardwareBreakpoint(addr, slot, type, size, callback)\n    DeleteHardwareBreakpoint(addr)\n    FindHardwareBreakpoint(addr) HardwareBreakpoint\n    WriteMemory(addr, data)\n    ReadMemory(addr, size) vector~byte~\n}\n\nProcess *-- Thread\nProcess *-- SoftwareBreakpoint\n\nclass Debugger {\n    Create(file, cmd)\n    Attach(proc)\n    Start()\n    Detach()\n    Stop()\n}\n\nDebugger o-- Process\n```\n\n## License\n\nDistributed under the *MIT License*. See `LICENSE` for more information.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhuagenborn%2Fwindows-x86-debugger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhuagenborn%2Fwindows-x86-debugger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhuagenborn%2Fwindows-x86-debugger/lists"}