Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/71/keystone.nim
Nim bindings for the Keystone assembler.
https://github.com/71/keystone.nim
asm assembler assembly keystone nim
Last synced: 6 days ago
JSON representation
Nim bindings for the Keystone assembler.
- Host: GitHub
- URL: https://github.com/71/keystone.nim
- Owner: 71
- Created: 2018-04-09T21:37:13.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-11-23T15:32:39.000Z (about 4 years ago)
- Last Synced: 2025-01-19T09:11:44.875Z (14 days ago)
- Topics: asm, assembler, assembly, keystone, nim
- Language: Nim
- Size: 11.7 KB
- Stars: 3
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Keystone.nim
============[Nim](https://nim-lang.org/) bindings for the [Keystone](http://www.keystone-engine.org/) assembler.
```nim
# Create engine safely
let engine = newX86Engine()defer:
engine.close()# Emit to tuple
let enc = engine.assemble("add eax, eax ; ret")assert enc.buf == @[ 0x01, 0xC0, 0xC3 ]
assert enc.size == 3
assert enc.statementsCount == 2# Emit using dot operator
let enc = engine.add("eax", "eax")# Emit to buffer now
var buf = newSeqOfCap[byte](0)engine.assemble("add eax, eax", buf)
engine.ret(buf)assert buf == @[ 0x01, 0xC0, 0xC3 ]
# No silent errors
try:
engine.assemble("add 42")
expect KeystoneError:
echo "Error encountered: ", getCurrentExceptionMsg()
```Thanks to macros, emitting any assembly code is *very* easy.
```nim
let engine = newX86Engine()# To a new buffer
let buf = assembly engine:
add eax, eax
ret# To an existing buffer
assembly engine, buf:
add eax, eax
ret
```