{"id":13598002,"url":"https://github.com/capstone-rust/capstone-rs","last_synced_at":"2025-04-10T06:30:53.136Z","repository":{"id":29882311,"uuid":"33427667","full_name":"capstone-rust/capstone-rs","owner":"capstone-rust","description":"high-level Capstone system bindings for Rust","archived":false,"fork":false,"pushed_at":"2024-04-13T09:05:40.000Z","size":12134,"stargazers_count":203,"open_issues_count":21,"forks_count":72,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-04-13T20:53:39.812Z","etag":null,"topics":["capstone","rust"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/capstone-rust.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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}},"created_at":"2015-04-05T02:23:32.000Z","updated_at":"2024-04-15T08:01:35.838Z","dependencies_parsed_at":"2023-02-15T10:31:37.818Z","dependency_job_id":"c3b76e30-2bae-4116-b384-b0f097b807bd","html_url":"https://github.com/capstone-rust/capstone-rs","commit_stats":{"total_commits":445,"total_committers":27,"mean_commits":16.48148148148148,"dds":0.348314606741573,"last_synced_commit":"8c17287b5d097379f9097cf0d7330133a5ae7b3a"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capstone-rust%2Fcapstone-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capstone-rust%2Fcapstone-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capstone-rust%2Fcapstone-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capstone-rust%2Fcapstone-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/capstone-rust","download_url":"https://codeload.github.com/capstone-rust/capstone-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223427419,"owners_count":17143290,"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":["capstone","rust"],"created_at":"2024-08-01T17:00:45.496Z","updated_at":"2024-11-06T22:31:11.268Z","avatar_url":"https://github.com/capstone-rust.png","language":"C","funding_links":[],"categories":["C","Reverse Engineering"],"sub_categories":[],"readme":"# capstone-rs\n\n[![Crates.io Badge](https://img.shields.io/crates/v/capstone.svg)](https://crates.io/crates/capstone)\n\nLinux/macOS/Windows [![Github Workflow CI Badge](https://github.com/capstone-rust/capstone-rs/actions/workflows/main.yml/badge.svg)](https://github.com/capstone-rust/capstone-rs/actions)\n|\nFreeBSD [![Cirrus CI Badge](https://api.cirrus-ci.com/github/capstone-rust/capstone-rs.svg)](https://cirrus-ci.com/github/capstone-rust/capstone-rs)\n\n[![codecov](https://codecov.io/gh/capstone-rust/capstone-rs/branch/master/graph/badge.svg)](https://codecov.io/gh/capstone-rust/capstone-rs)\n\n\n **[API Documentation](https://docs.rs/capstone/)**\n\n\nBindings to the [capstone library][upstream] disassembly framework.\n\nThe `Capstone` struct is the main interface to the library.\n\n# Requirements\n\n`capstone-rs` uses the [`capstone-sys`](capstone-sys) crate to provide the low-level bindings to the Capstone C library.\n\nSee the [`capstone-sys`](capstone-sys) page for the requirements and supported platforms.\n\n* Minimum Rust Version: `1.70.0`\n\n# Example\n\n```rust\nextern crate capstone;\n\nuse capstone::prelude::*;\n\nconst X86_CODE: \u0026'static [u8] = b\"\\x55\\x48\\x8b\\x05\\xb8\\x13\\x00\\x00\\xe9\\x14\\x9e\\x08\\x00\\x45\\x31\\xe4\";\n\n/// Print register names\nfn reg_names(cs: \u0026Capstone, regs: \u0026[RegId]) -\u003e String {\n    let names: Vec\u003cString\u003e = regs.iter().map(|\u0026x| cs.reg_name(x).unwrap()).collect();\n    names.join(\", \")\n}\n\n/// Print instruction group names\nfn group_names(cs: \u0026Capstone, regs: \u0026[InsnGroupId]) -\u003e String {\n    let names: Vec\u003cString\u003e = regs.iter().map(|\u0026x| cs.group_name(x).unwrap()).collect();\n    names.join(\", \")\n}\n\nfn main() {\n    let cs = Capstone::new()\n        .x86()\n        .mode(arch::x86::ArchMode::Mode64)\n        .syntax(arch::x86::ArchSyntax::Att)\n        .detail(true)\n        .build()\n        .expect(\"Failed to create Capstone object\");\n\n    let insns = cs.disasm_all(X86_CODE, 0x1000)\n        .expect(\"Failed to disassemble\");\n    println!(\"Found {} instructions\", insns.len());\n    for i in insns.as_ref() {\n        println!();\n        println!(\"{}\", i);\n\n        let detail: InsnDetail = cs.insn_detail(\u0026i).expect(\"Failed to get insn detail\");\n        let arch_detail: ArchDetail = detail.arch_detail();\n        let ops = arch_detail.operands();\n\n        let output: \u0026[(\u0026str, String)] = \u0026[\n            (\"insn id:\", format!(\"{:?}\", i.id().0)),\n            (\"bytes:\", format!(\"{:?}\", i.bytes())),\n            (\"read regs:\", reg_names(\u0026cs, detail.regs_read())),\n            (\"write regs:\", reg_names(\u0026cs, detail.regs_write())),\n            (\"insn groups:\", group_names(\u0026cs, detail.groups())),\n        ];\n\n        for \u0026(ref name, ref message) in output.iter() {\n            println!(\"{:4}{:12} {}\", \"\", name, message);\n        }\n\n        println!(\"{:4}operands: {}\", \"\", ops.len());\n        for op in ops {\n            println!(\"{:8}{:?}\", \"\", op);\n        }\n    }\n}\n```\n\nProduces:\n\n```plain\nFound 4 instructions\n\n0x1000: pushq %rbp\n    read regs:   rsp\n    write regs:  rsp\n    insn groups: mode64\n\n0x1001: movq 0x13b8(%rip), %rax\n    read regs:\n    write regs:\n    insn groups:\n\n0x1008: jmp 0x8ae21\n    read regs:\n    write regs:\n    insn groups: jump\n\n0x100d: xorl %r12d, %r12d\n    read regs:\n    write regs:  rflags\n    insn groups:\n```\n\nTo see more demos, see the [`examples/`](capstone-rs/examples) directory.\nMore complex demos welcome!\n\n# Features\n\n- `full`\u003csup\u003e\u0026dagger;\u003c/sup\u003e: do not compile Capstone C library in\n  [diet mode](https://www.capstone-engine.org/diet.html)\n- `std`\u003csup\u003e\u0026dagger;\u003c/sup\u003e: enable `std`-only features, such as the\n  [`Error` trait](https://doc.rust-lang.org/std/error/trait.Error.html)\n- `use_bindgen`: run `bindgen` to generate Rust bindings to Capstone C library\n  instead of using pre-generated bindings (not recommended).\n\n\u003csup\u003e\u0026dagger;\u003c/sup\u003e: enabled by default\n\n# Reporting Issues\n\nPlease open a [Github issue](https://github.com/capstone-rust/capstone-rs/issues)\n\n# Author\n\n- Library Author: Nguyen Anh Quynh\n- Binding Author(s):\n    - m4b \u003cm4b.github.io@gmail.com\u003e\n    - Richo Healey \u003cricho@psych0tik.net\u003e\n    - Travis Finkenauer \u003ctmfinken@gmail.com\u003e\n\nYou may find a [full list of contributors on Github](https://github.com/capstone-rust/capstone-rs/graphs/contributors).\n\n# License\n\n[MIT](capstone-rs/LICENSE)\n\n[upstream]: https://www.capstone-engine.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcapstone-rust%2Fcapstone-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcapstone-rust%2Fcapstone-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcapstone-rust%2Fcapstone-rs/lists"}