Libdisasm中的错误?

时间:2015-07-30 17:19:28

标签: c enums disassembly

当我遇到一个小bug时,我正在使用Libdisasm(来自http://sourceforge.net/projects/bastard/files/libdisasm/0.23/的版本.23)进行一些反汇编。当我从enum x86_insn_type结构(http://bastard.sourceforge.net/libdisasm.html之后)打印x86_insn_t时,我发现所有浮点指令似乎都具有相同的类型(所有其他指令都很好)(因为你可以当我打印指令时见下文)

Instruction type a000, fld  [ebp-0x10] 
Instruction type a000, fld  [0x8048588] 
Instruction type a000, fmulp st(1), st(0) 
Instruction type a000, fstp [ebp-0x10] 

以下是enum x86_insn_type的一小部分,

 /* insn_fpu */
        insn_fmov = 0xA001,
        insn_fmovcc = 0xA002,
        insn_fneg = 0xA003,
        insn_fabs = 0xA004,
        insn_fadd = 0xA005,
        insn_fsub = 0xA006,
        insn_fmul = 0xA007,
        insn_fdiv = 0xA008,

这是libdisasm库中的一个错误(因为它很旧并且很长时间没有更新),或者我做错了什么?

使用的代码。

    x86_insn_t insn;
    char buf[MAX_INSN_SIZE];
    char line_to_print[LINE_SIZE];
    int size;
    int to_return;

    x86_init(opt_none, NULL, NULL);

    //Here I read one Instruction into buf and then call x86_disasm

    size = x86_disasm((unsigned char*)buf, MAX_INSN_SIZE, 0, 0, insn);
    if(size)
    {
        x86_format_insn(&insn, line_to_print, LINE_SIZE, intel_syntax);
        printf("Instruction type %x, %s \n", insn.type, line_to_print);
    }
    x86_cleanup();

0 个答案:

没有答案