{"id":20635875,"url":"https://github.com/ryanhaticus/legv8-disassembler","last_synced_at":"2026-04-18T22:31:06.600Z","repository":{"id":205841226,"uuid":"714571985","full_name":"ryanhaticus/legv8-disassembler","owner":"ryanhaticus","description":"C++ disassembler for the LEGv8 subset of ARM.","archived":false,"fork":false,"pushed_at":"2023-11-06T18:06:49.000Z","size":10,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-30T06:20:46.470Z","etag":null,"topics":["disassembler","legv8","legv8-arm"],"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/ryanhaticus.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"authors.txt","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-05T09:01:58.000Z","updated_at":"2025-05-10T20:41:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"74da0706-bdd7-46f9-899f-fe870dcbd39b","html_url":"https://github.com/ryanhaticus/legv8-disassembler","commit_stats":null,"previous_names":["ryanhaticus/legv8-disassembler"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ryanhaticus/legv8-disassembler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanhaticus%2Flegv8-disassembler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanhaticus%2Flegv8-disassembler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanhaticus%2Flegv8-disassembler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanhaticus%2Flegv8-disassembler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanhaticus","download_url":"https://codeload.github.com/ryanhaticus/legv8-disassembler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanhaticus%2Flegv8-disassembler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31987658,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"ssl_error","status_checked_at":"2026-04-18T20:23:29.375Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["disassembler","legv8","legv8-arm"],"created_at":"2024-11-16T15:07:54.411Z","updated_at":"2026-04-18T22:31:06.581Z","avatar_url":"https://github.com/ryanhaticus.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LEGv8 Disassembler\n\nEnclosed in this repository is a disassembler (binary to assembly) for 32-bit LEGv8 (a subset of ARM first described by David A. Patterson and John L. Hennessy) instructions written in C++.\n\n## Coursework\n\nThis project was developed as part of COM S 321 (Computer Architecture) at Iowa State University, instructed by Dr. Jeremy Sheaffer.\n\n## What's included?\n\nThe disassembler can handle the following instruction types:\n\n- B\n- CB\n- D\n- I\n- IW\n- R\n\nSpecifically, supporting the following instructions:\n\n- ADD\n- ADDI\n- AND\n- ANDI\n- B\n- B.cond (EQ, NE, HS, LO, MI, PL, VS, VC, HI, LS, GE, LT, GT, LE)\n- BL\n- BR\n- CBNZ\n- CBZ\n- EOR\n- EORI\n- LDUR\n- LSL\n- LSR\n- ORR\n- ORRI\n- STUR\n- SUB\n- SUBI\n- SUBIS\n- SUBS\n- MUL\n\nAlong with these special instructions, implemented by some emulators:\n\n- PRNT\n- PRNL\n- DUMP\n- HALT\n\n## Endianness\n\nAs most modern systems are little-endian, we assume that the input binary is little-endian.\n\n## Usage\n\nPer course guidelines, the project ships with a `build.sh` and `run.sh` - these do what you expect.\n\nTo build the project, simply run `./build.sh`. You must have `make` and `g++` installed ahead of time. You will see the executable `disasm` generated. You may execute this binary directly, or use the provided `run.sh` script.\n\nNext, to disassemble a binary, run `./run.sh \u003cpath-to-binary\u003e`. The disassembled output will be written to `\u003cpath-to-binary\u003e.legv8asm`. For example, if you run `./run.sh test.bin`, the output will be written to `test.bin.legv8asm`.\n\n## Considerations\n\nWhen originally approaching this project, I had wanted to use a more object-oriented approach. However, I quickly realized it'd be rather burdensome to ensure I was shifting out values and storing them in class members correctly.\n\nInstead, I opted to create classic C `struct`s to represent the various instruction types. Once I dynamically identify an instruction's opcode, I can then cast the `uint32_t` bitfield to the appropriate `struct` and access the fields directly without headache. For those interested in creating a disassembler, I highly recommend this approach.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanhaticus%2Flegv8-disassembler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryanhaticus%2Flegv8-disassembler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryanhaticus%2Flegv8-disassembler/lists"}