egra: agg mini code cleanups
[iv.d.git] / keystone / test00.d
blobc881a8776c9cdf5225a996f975ac4d9006a7b4e1
1 import iv.keystone;
2 import std.stdio;
5 // separate assembly instructions by ; or \n
6 immutable string CODE = "INC ecx; DEC edx";
8 void main () {
9 ks_engine *ks;
10 ks_err err;
11 usize count;
12 ubyte* encode;
13 usize size;
15 err = ks_open(KS_ARCH_X86, KS_MODE_32, &ks);
16 if (err != KS_ERR_OK) assert(0, "FATAL: can't init keystone");
18 if (ks_asm(ks, CODE.ptr, 0, &encode, &size, &count) != KS_ERR_OK) {
19 import std.string : fromStringz;
20 writefln("ERROR: ks_asm() failed & count = %s, error = %s (%s)", count, ks_errno(ks), ks_strerror(ks_errno(ks)).fromStringz);
21 } else {
22 writefln("%s = ", CODE);
23 foreach (immutable i; 0..size) writef("%02x ", encode[i]);
24 writeln();
25 writefln("Compiled: %s bytes, statements: %s", size, count);
28 // NOTE: free encode after usage to avoid leaking memory
29 ks_free(encode);
31 // close Keystone instance when done
32 ks_close(ks);