-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New APIs: cs_disasm_alloc() & cs_disasm_buf()
aquynh edited this page Oct 3, 2014
·
21 revisions
Currently cs_disasm() API allocate memory for disassembled instructions every time it runs, which is expensive if we need to decode a lot of instructions.
This proposal proposes 2 new API:
-
cs_disasm_malloc
: pre-allocate buffer for instructions -
cs_disasm_buf
: disassemble instructions into pre-allocated buffer provided bycs_disasm_malloc
Prototype:
// pre-allocate memory for @count instructions
cs_err cs_disasm_malloc(csh handle, size_t count, cs_insn **insn);
// disassemble @count instructions using buffer pre-allocated by cs_disasm_malloc()
size_t cs_disasm_buf(csh handle,
const uint8_t *code, size_t code_size,
uint64_t address,
size_t count,
cs_insn **insn);
Sample code will be like (pseudo)
if (cs_disasm_malloc(h, count, &insns) == CS_ERR_OK) {
while(c = cs_disasm_buf(h, code, size, address, count, &insns)) {
// analyze instructions in @insns
length = CS_INSN_OFFSET(insn, c);
code += length;
size += length;
address += length;
}
}