MBR读取之后,利用引擎转汇编代码,但是分析发现是错误的,最后找了标准的MBR对比了结果,发现确实错误的:
发现解析机器码7C的时候,总与后面一起汇编了,导致出错:
编译器:vs15 x64,系统:win10 x64,Capstone也是用的64的dll与lib,
核心代码如下:
参数pAddr传入需要转换成汇编hex,后面是大小
void Capstone::ShowAssembly(const void* pAddr, int nLen)
{
this->InitCapstone();
// 接收OpCode大小 最大16保存机器指令
BYTE* pOpCode = (BYTE *)malloc(nLen * 16);
memset(pOpCode, 0, (sizeof(BYTE) * 16 * nLen) );
SIZE_T read = 0;
// 反汇编指定条数的语句
// 用来读取指令位置内存的缓冲区信息
cs_insn* ins = nullptr;
// 读取指定长度的内存空间
DWORD dwCount = 0;
// 参数1:表示那个进程 参数2:表示进程地址,address startRead ,参数三:空间大小
// ReadProcessMemory(NULL, pAddr, pOpCode, nLen * 16, &dwCount);
memcpy(pOpCode, pAddr, nLen);
int count = cs_disasm(Handle, (uint8_t*)pOpCode, nLen * 16, (uint64_t)pAddr, 0, &ins);
for (int i = 0; i < count; ++i)
{
printf("%08X\t", ins[i].address);
for (uint16_t j = 0; j < 16; ++j)
{
if (j < ins[i].size)
printf("%02X", ins[i].bytes[j]);
else
printf(" ");
}
printf("\t");
printf("%s ", ins[i].mnemonic);
cout << ins[i].op_str << endl;
}
printf("\n");
// 释放动态分配的空间
delete[] pOpCode;
cs_free(ins, count);
}
错误如下所示:
引擎的BUG还是代码编写的不规范?如何进行优化需要啃引擎的那些模块?大佬们
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)