{"id":20716869,"url":"https://github.com/blacktop/arm64-cgo","last_synced_at":"2025-04-23T13:30:52.076Z","repository":{"id":38237574,"uuid":"386458458","full_name":"blacktop/arm64-cgo","owner":"blacktop","description":"Golang bindings for the Binary Ninja Arm64 Disassembler.","archived":false,"fork":false,"pushed_at":"2024-12-21T19:06:10.000Z","size":1640,"stargazers_count":14,"open_issues_count":2,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-30T00:05:15.435Z","etag":null,"topics":["aarch64","arm64","arm64-v8a","arm64-v9a","go","golang"],"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/blacktop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2021-07-16T00:16:53.000Z","updated_at":"2024-12-21T19:05:57.000Z","dependencies_parsed_at":"2024-06-19T00:14:54.714Z","dependency_job_id":"85b10846-1f28-4ffa-a126-cae121141fd6","html_url":"https://github.com/blacktop/arm64-cgo","commit_stats":null,"previous_names":[],"tags_count":59,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacktop%2Farm64-cgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacktop%2Farm64-cgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacktop%2Farm64-cgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blacktop%2Farm64-cgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blacktop","download_url":"https://codeload.github.com/blacktop/arm64-cgo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250440086,"owners_count":21430949,"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":["aarch64","arm64","arm64-v8a","arm64-v9a","go","golang"],"created_at":"2024-11-17T03:07:01.235Z","updated_at":"2025-04-23T13:30:51.998Z","avatar_url":"https://github.com/blacktop.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# arm64-cgo\n\n[![Go](https://github.com/blacktop/arm64-cgo/actions/workflows/go.yml/badge.svg)](https://github.com/blacktop/arm64-cgo/actions/workflows/go.yml)\n![GitHub all releases](https://img.shields.io/github/downloads/blacktop/arm64-cgo/total)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/blacktop/arm64-cgo)](https://github.com/blacktop/arm64-cgo/releases/latest)\n[![PkgGoDev](https://pkg.go.dev/badge/blacktop/arm64-cgo)](https://pkg.go.dev/github.com/blacktop/arm64-cgo/disassemble)\n![GitHub](https://img.shields.io/github/license/blacktop/arm64-cgo?color=blue)\n\n\u003e Golang bindings for the Binary Ninja [Arm64 Disassembler](https://github.com/Vector35/arch-arm64) with support for **ARMv9A (2021-06 spec)**\n\n## Getting Started\n\n```bash\ngo get github.com/blacktop/arm64-cgo\n```\n\n```go\npackage main\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/blacktop/arm64-cgo/disassemble\"\n)\n\nfunc main() {\n\n\tvar startAddr uint64\n\tvar instrValue uint32\n\tvar results [1024]byte\n\n\tdata, err := ioutil.ReadFile(os.Args[1])\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tr := bytes.NewReader(data)\n\n\tfor {\n\t\terr = binary.Read(r, binary.LittleEndian, \u0026instrValue)\n\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\n\t\tinstruction, err := disassemble.Disassemble(startAddr, instrValue, \u0026results)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\n\t\tfmt.Printf(\"%#08x:  %s\\t%s\\n\",\n\t\t\tuint64(startAddr),\n\t\t\tdisassemble.GetOpCodeByteString(instrValue),\n\t\t\tinstruction)\n\n\t\tstartAddr += uint64(binary.Size(uint32(0)))\n\t}\n}\n```\n\n## MachO disassembler CLI `disass`\n\n### Install\n\n```bash\ngo install github.com/blacktop/arm64-cgo/cmd/disass@latest\n```\n\nWith [Homebrew](https://brew.sh)\n\n```bash\nbrew install blacktop/tap/disass\n```\n\n\u003e OR download from [Releases](https://github.com/blacktop/arm64-cgo/releases/latest)\n\n### Usage\n\n```bash\ndisass hello-mte --vaddr 0x100007f1c\n```\n\n```s\n_main:\n0x100007ef0:  7f 23 03 d5\tpacibsp\n0x100007ef4:  ff 43 01 d1\tsub\tsp, sp, #0x50\n0x100007ef8:  fd 7b 04 a9\tstp\tx29, x30, [sp, #0x40]\n0x100007efc:  fd 03 01 91\tadd\tx29, sp, #0x40\n0x100007f00:  08 00 00 b0\tadrp\tx8, 0x100008000\n0x100007f04:  08 09 40 f9\tldr\tx8, [x8, #0x10]\n0x100007f08:  08 01 40 f9\tldr\tx8, [x8]\n0x100007f0c:  a8 83 1f f8\tstur\tx8, [x29, #-0x8]\n0x100007f10:  08 00 80 d2\tmov\tx8, #0\n0x100007f14:  e8 13 c8 9a\tirg\tx8, sp, x8\n0x100007f18:  09 01 82 91\taddg\tx9, x8, #0x20, #0\n👉100007f1c:  29 09 20 d9\tstg\tx9, [x9]\n0x100007f20:  08 05 81 91\taddg\tx8, x8, #0x10, #0x1\n0x100007f24:  08 09 20 d9\tstg\tx8, [x8]\n0x100007f28:  0a 00 80 52\tmov\tw10, #0\n0x100007f2c:  2a 01 00 b9\tstr\tw10, [x9]\n0x100007f30:  e8 07 00 f9\tstr\tx8, [sp, #0x8]\n0x100007f34:  ca ff ff 97\tbl\t_test\n0x100007f38:  e8 07 40 f9\tldr\tx8, [sp, #0x8]\n0x100007f3c:  00 01 00 39\tstrb\tw0, [x8]\n0x100007f40:  0a 01 40 39\tldrb\tw10, [x8]\n0x100007f44:  e9 03 0a aa\tmov\tx9, x10\n0x100007f48:  eb 03 00 91\tmov\tx11, sp\n0x100007f4c:  69 01 00 f9\tstr\tx9, [x11]\n0x100007f50:  00 00 00 90\tadrp\tx0, 0x100007000\n0x100007f54:  00 d0 3e 91\tadd\tx0, x0, #0xfb4 ; \"%c\\n\"\n0x100007f58:  13 00 00 94\tbl\t0x100007fa4\n0x100007f5c:  ff 1b a0 d9\tst2g\tsp, [sp, #0x10]\n0x100007f60:  08 00 00 b0\tadrp\tx8, 0x100008000\n0x100007f64:  08 09 40 f9\tldr\tx8, [x8, #0x10]\n0x100007f68:  08 01 40 f9\tldr\tx8, [x8]\n0x100007f6c:  a9 83 5f f8\tldur\tx9, [x29, #-0x8]\n0x100007f70:  08 01 09 eb\tsubs\tx8, x8, x9\n0x100007f74:  c1 00 00 54\tb.ne\t0x100007f8c\n0x100007f78:  01 00 00 14\tb\t0x100007f7c\n0x100007f7c:  00 00 80 52\tmov\tw0, #0\n0x100007f80:  fd 7b 44 a9\tldp\tx29, x30, [sp, #0x40]\n0x100007f84:  ff 43 01 91\tadd\tsp, sp, #0x50\n0x100007f88:  ff 0f 5f d6\tretab\n0x100007f8c:  02 00 00 94\tbl\t0x100007f94\n0x100007f90:  20 00 20 d4\tbrk\t#0x1\n```\n\n### Make it pretty 💄\n\n```bash\nbrew install bat\n```\n\n```bash\ndisass hello-mte --vaddr 0x100007f1c \\\n\t| bat -l s --tabs 0 -p --theme Nord --wrap=never --pager \"less -S\"\n```\n\n### Output as JSON\n\n```bash\ndisass hello-mte --symbol _main --json | jq .\n```\n\n```json\n[\n   {\n      \"address\": 4294999644,\n      \"raw\": 3573752703,\n      \"encoding\": \"PACIBSP_HI_hints\",\n      \"operation\": \"pacibsp\",\n      \"disassembly\": \"pacibsp\"\n   },\n   {\n      \"address\": 4294999648,\n      \"raw\": 3506619391,\n      \"encoding\": \"SUB_64_addsub_imm\",\n      \"operation\": \"sub\",\n      \"operands\": [\n         {\n            \"class\": \"REG\",\n            \"registers\": [\n               \"sp\"\n            ]\n         },\n         {\n            \"class\": \"REG\",\n            \"registers\": [\n               \"sp\"\n            ]\n         },\n         {\n            \"class\": \"IMM64\",\n            \"immediate\": 176\n         }\n      ],\n      \"disassembly\": \"sub\\tsp, sp, #0xb0\"\n   },\n   {\n      \"address\": 4294999652,\n      \"raw\": 2836036605,\n      \"encoding\": \"STP_64_ldstpair_off\",\n      \"operation\": \"stp\",\n      \"operands\": [\n         {\n            \"class\": \"REG\",\n            \"registers\": [\n               \"x29\"\n            ]\n         },\n         {\n            \"class\": \"REG\",\n            \"registers\": [\n               \"x30\"\n            ]\n         },\n         {\n            \"class\": \"MEM_OFFSET\",\n            \"registers\": [\n               \"sp\"\n            ],\n            \"immediate\": 160,\n            \"signed_imm\": true\n         }\n      ],\n      \"disassembly\": \"stp\\tx29, x30, [sp, #0xa0]\"\n   },\n   \u003cSNIP\u003e\n  {\n      \"address\": 4294999788,\n      \"raw\": 3558866976,\n      \"encoding\": \"BRK_EX_exception\",\n      \"operation\": \"brk\",\n      \"operands\": [\n         {\n            \"class\": \"IMM32\",\n            \"immediate\": 1\n         }\n      ],\n      \"disassembly\": \"brk\\t#0x1\"\n   }\n]\n```\n\n## License\n\nMIT Copyright (c) 2021-2023 blacktop\n\nApache License, Version 2.0 Copyright 2020-2021 Vector 35 Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblacktop%2Farm64-cgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblacktop%2Farm64-cgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblacktop%2Farm64-cgo/lists"}