Как заставить capstone производить последнюю строку двоичного ввода?

Сегодня я попытался начать с Capstone. Следуя их примеру, я хотел начать работать с библиотекой. К сожалению, capstone не производит последнюю строку ассемблерных инструкций, которые он разбирает. Выдает только пустую строку.

Код:

#include <stdio.h>
#include <inttypes.h>
#include <string>
#include <iostream>

#include <capstone/capstone.h>
int main(void)
{
    csh handle;
    cs_insn *insn;
    size_t count;
    const uint8_t CODE[] = {0x55,0x48,0x8b,0x05,0xb8,0x13,0x00,0x00};
    if (cs_open(CS_ARCH_X86, CS_MODE_64, &handle) != CS_ERR_OK)
        return -1;
    count = cs_disasm_ex(handle, CODE, sizeof(CODE)-1, 0x1000, 0, &insn);
    if (count > 0) {
        size_t j;
        for (j = 0; j < count; j++) {
            printf("0x%" PRIx64":\t%s\t\t%s\n", insn[j].address, insn[j].mnemonic,
            insn[j].op_str);
        }

        cs_free(insn, count);
        } else
            printf("ERROR: Failed to disassemble given code!\n");
        cs_close(&handle);

        return 0;
}

Вместо получения

0x1000: push        rbp
0x1001: mov     rax, qword ptr [rip + 0x13b8]

я получил

0x1000: push        rbp

где печатается последняя строка, но пустая.

Может кто-нибудь помочь мне решить эту проблему?

1 ответ

Решение

Вы не должны делать

cs_disasm_ex(handle, CODE, sizeof(CODE), 0x1000, 0, &insn);

вместо

cs_disasm_ex(handle, CODE, sizeof(CODE)-1, 0x1000, 0, &insn);

?

Другие вопросы по тегам