我需要编写类似“反汇编程序”的内容,我需要读取RAM内存(代码段)并以格式化的方式显示

ADD rax, rbx
MOV rcx, rax

在哪里可以找到有关如何将操作码转换为相应的操作数的综合指南/论文?我的目标是x64组装

最佳答案

我真的建议您只使用BSD许可的udis86 library,而不要编写另一个x86反汇编程序:

#include <stdio.h>
#include <udis86.h>

enum {
    /* Controls whether to disassemble for x86 or x64 */
    UDIS86_MODE = 64 /* 16, 32, or 64 */
};

int main()
{
    ud_t ud_obj;

    ud_init(&ud_obj);

    ud_set_input_file(&ud_obj, stdin);
    ud_set_mode(&ud_obj, UDIS86_MODE);
    ud_set_syntax(&ud_obj, UD_SYN_INTEL);

    while (ud_disassemble(&ud_obj)) {
        printf("\t%s\n", ud_insn_asm(&ud_obj));
    }

    return 0;
}

github上的Udis86版本甚至支持最新的Intel AVX指令。

使用MinGW64 / MSYS工具链,对于x86或x64 Windows而言,Udis86非常容易构建。以防万一您不熟悉GCC和GNU自动工具构建系统,我构建了:
  • http://scottt.tw/mingw32-udis86.tar.gz
  • http://scottt.tw/mingw64-udis86.tar.gz

  • 为了您的方便。归档文件包含DLL和头文件。 (从随机的陌生人那里下载并运行DLL并回答关于Stackoverflow的问题是否明智是另一回事;)。

    09-07 03:10