int main()
{
EnableDebugPriv();
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS,0,5924);
if (!processHandle)
{
DWORD err = GetLastError();
printf("打开进程失败,errorcode:%d\n", err);
getchar();
return 0;
}
char*buffer = malloc(0x1000);
ZeroMemory(buffer,0x1000);
ReadProcessMemory(processHandle, (PVOID)0x00007FF7C3F58100, buffer,0x50,NULL);
ud_t ud_obj;
//初始化
ud_init(&ud_obj);
//设置指令模式
ud_set_mode(&ud_obj, 64);
//设置语法类型
ud_set_syntax(&ud_obj, UD_SYN_INTEL);
//设置解析OPCODE的起始地址 这个值是在目标进程中的值
ud_set_pc(&ud_obj, 0x00007FF7C3F58100);
//参数2 需要反汇编的地址 反汇编的长度
ud_set_input_buffer(&ud_obj, buffer, 0x50);
while (ud_disassemble(&ud_obj))
{
//ud_insn_off(&ud_obj) 获得当前的指令地址
//ud_insn_asm 获取当前的反汇编后的字符串
printf("%I64x %s %s\n", ud_insn_off(&ud_obj), ud_insn_hex(&ud_obj), ud_insn_asm(&ud_obj));
}
getchar();
return 0;
}
Udis86反汇编引擎的使用
最新推荐文章于 2024-08-09 07:14:02 发布
该代码段展示了如何利用UDAPI(UDK Universal Disassembler Kit)在64位模式下,读取并反汇编指定进程内存中的指令。它首先打开一个进程,然后读取内存,接着初始化UDAPI,设置模式、语法类型,并进行反汇编,最后打印出反汇编后的指令及其地址。
摘要由CSDN通过智能技术生成