mirror of
https://github.com/6A/Keystone.nim
synced 2026-01-14 00:31:35 +00:00
No description
| .vscode | ||
| src | ||
| tests | ||
| .gitignore | ||
| keystone.nimble | ||
| README.md | ||
Keystone.nim
Nim bindings for the Keystone assembler.
# 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.
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