#include <capstone.h>
#include <iostream>
#define g_DisasmCode "\x55\x48\x8b\x05\xb8\x13\x00\x00"
int main(int, char**)
{
csh handle;
cs_insn *insn;
size_t count;
// Ignore the architecture and mode, they are correct i just changed
// the names
if(cs_open(ArchX86, Mode32, &handle) != CS_ERR_OK)
return -1;
count = cs_disasm(handle, (uint8_t*)g_DisasmCode, sizeof(g_DisasmCode) - 1, 0x1000, 0, &insn);
if(count > 0)
{
size_t j;
for(j = 0; j < count; j++)
{
printf("%i:\t%s\t\t%s\n", insn[j].size, insn[j].mnemonic,
insn[j].op_str);
}
cs_free(insn, count);
}
else
printf("ERROR: Failed to disassemble given code!\n");
cs_close(&handle);
}
I2luY2x1ZGUgPGNhcHN0b25lLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCiNkZWZpbmUgZ19EaXNhc21Db2RlICJceDU1XHg0OFx4OGJceDA1XHhiOFx4MTNceDAwXHgwMCIKCmludCBtYWluKGludCwgY2hhcioqKQp7CiAgICBjc2ggaGFuZGxlOwogICAgY3NfaW5zbiAqaW5zbjsKICAgIHNpemVfdCBjb3VudDsKCi8vIElnbm9yZSB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBtb2RlLCB0aGV5IGFyZSBjb3JyZWN0IGkganVzdCBjaGFuZ2VkCi8vIHRoZSBuYW1lcwogICAgICAgIGlmKGNzX29wZW4oQXJjaFg4NiwgTW9kZTMyLCAmaGFuZGxlKSAhPSBDU19FUlJfT0spCiAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIGNvdW50ID0gY3NfZGlzYXNtKGhhbmRsZSwgKHVpbnQ4X3QqKWdfRGlzYXNtQ29kZSwgc2l6ZW9mKGdfRGlzYXNtQ29kZSkgLSAxLCAweDEwMDAsIDAsICZpbnNuKTsKICAgIGlmKGNvdW50ID4gMCkKICAgIHsKICAgICAgICBzaXplX3QgajsKICAgICAgICBmb3IoaiA9IDA7IGogPCBjb3VudDsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIlaTpcdCVzXHRcdCVzXG4iLCBpbnNuW2pdLnNpemUsIGluc25bal0ubW5lbW9uaWMsCmluc25bal0ub3Bfc3RyKTsKCiAgICAgICAgfQoKY3NfZnJlZShpbnNuLCBjb3VudCk7CgogICAgfQogICAgZWxzZQpwcmludGYoIkVSUk9SOiBGYWlsZWQgdG8gZGlzYXNzZW1ibGUgZ2l2ZW4gY29kZSFcbiIpOwoKY3NfY2xvc2UoJmhhbmRsZSk7Cn0=