Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/blacktop/go-llvm-mc
Go wrapper for llvm-mc
https://github.com/blacktop/go-llvm-mc
armv8 disassembler golang llvm llvm-mc
Last synced: 6 days ago
JSON representation
Go wrapper for llvm-mc
- Host: GitHub
- URL: https://github.com/blacktop/go-llvm-mc
- Owner: blacktop
- License: mit
- Created: 2019-03-15T16:24:42.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-10-25T02:09:07.000Z (over 4 years ago)
- Last Synced: 2024-12-07T18:54:11.502Z (about 2 months ago)
- Topics: armv8, disassembler, golang, llvm, llvm-mc
- Language: Go
- Size: 14.6 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-llvm-mc
> Go wrapper for llvm-mc
---
## Dependancies
- [llvm-mc](https://github.com/llvm/llvm-project/tree/master/llvm/tools/llvm-mc)
### Install `llvm-mc`
```bash
$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project
$ mkdir build
$ cd build
$ cmake ../llvm -DLLVM_ENABLE_PROJECTS='llvm-objdump,llvm-mc' -DCMAKE_INSTALL_PREFIX=/tmp/llvm
$ make install
$ cp /tmp/llvm/bin/llvm-mc /usr/local/bin/llvm-mc
```## Getting Started
```bash
NAME:
main - A new cli applicationUSAGE:
main [global options] command [command options] [arguments...]VERSION:
0.0.0COMMANDS:
assemble, a convert ASM to binary
disassemble, d disassemble binary
help, h Shows a list of commands or help for one commandGLOBAL OPTIONS:
--count value, -c value number of instructions to print (default: 500)
--timeout value timeout (in seconds) (default: 45) [$LLVMMC_TIMEOUT]
--help, -h show help
--version, -v print the version
```### `disassemble`
```bash
NAME:
main disassemble - disassemble binaryUSAGE:
main disassemble [command options] [arguments...]OPTIONS:
--arch value Architecture (default: "arm64") [$LLVMMC_ARCH]
--mattr value Machine Attributes (default: "v8.5a") [$LLVMMC_MATTR]
```#### Example
```bash
$ go run main.go --count 1000 disassemble kernelcache.release.iphone11.decompressed | less
``````asm
.section __TEXT_EXEC,__text,regular,pure_instructions
mov x0, #29313
movk x0, #28518, lsl #16
movk x0, #28786, lsl #32
movk x0, #65388, lsl #48
ret
neg w8, w0
and w0, w8, #0x7
ret
adrp x8, #22691840
ldr x0, [x8]
ret
pacibsp
stp x24, x23, [sp, #-64]!
stp x22, x21, [sp, #16]
stp x20, x19, [sp, #32]
stp x29, x30, [sp, #48]
mov x19, x3
mov x20, x2
mov x21, x1
mov x22, x0
sub x23, x5, x4
mov x0, x23
bl #-68
mov w8, #47
sub x8, x8, x22
add x8, x8, x21
mov x9, #-6148914691236517206
movk x9, #43691
umulh x9, x8, x9
lsr x9, x9, #5
```=OR=
#### Just use `llvm-objdump`
```bash
$ llvm-objdump -arch=arm64 -mattr=v8.5a -d kernelcache.release.iphone11.decompressed | less
```