搜索了下扒了完整库,整理了下,下面给出基本使用方法
//引用库
extern "C" {
#include "disasm/udis86.h"
}
int Test(int a, int b) {
int d = a + b + 0x199;
return d;
}
int main()
{
HMODULE hHandle = GetModuleHandle(NULL);
printf("Address: 0x%p = %d\r\n", &Test, Test(2,3));
byte *buffer = (byte*)&Test;
//结构
ud_t ud_obj;
//初始化 结构
ud_init(&ud_obj);
//设置代码位数 16 = 16位, 32 = 32位,64 = 64位
ud_set_mode(&ud_obj, 32);
//设置解析指令集
ud_set_syntax(&ud_obj, UD_SYN_INTEL);
//设置解析地址的起始地址(可以不设置 地址就是从 0 开始)
ud_set_pc(&ud_obj, (DWORD)&Test);
//传入需要解析的代码和解析长度
ud_set_input_buffer(&ud_obj, buffer, 0x20);
//输出解析后的结果
while (ud_disassemble(&ud_obj)) {
printf("%I64X \t\t %s \t\t %s\n",
ud_insn_off(&ud_obj), //相对地址
ud_insn_hex(&ud_obj), //编码
ud_insn_asm(&ud_obj)); //指令
}
getchar();
return 0;
}
输出效果:
这里顺便给出整理打包好的库