机器码转汇编 - Disassemble
函数简介
将指定的机器码转换为汇编语言输出,支持x86、ARM、ARM64等架构。
接口名称
Disassemble
DLL调用
long Disassemble(long instance, string asmCode, long baseAddr, int arch, int mode, int showType);
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| instance | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| asmCode | 字符串 | 机器码,形式如"aa bb cc"这样的16进制表示的字符串(空格无所谓) |
| baseAddr | 长整数型 | 指令所在的地址 |
| arch | 整数型 | 架构类型: 0: x86 1: arm 2: arm64 |
| mode | 整数型 | 模式: 16: 16位 32: 32位 64: 64位 |
| showType | 整数型 | 显示类型: 0: 显示详细汇编信息 1: 只显示机器码 |
示例
// x86 32位机器码转汇编
char machine_code[] = "B8 7B 00 00 00"; // mov eax, 123
long result = Disassemble(ola, machine_code, 0x10000000, 0, 32, 0);
if (result != 0) {
char* asm_code = (char*)result;
printf("汇编代码: %s\n", asm_code);
FreeStringPtr(ola, result);
}
// 多条指令解析
char multi_instructions[] = "B8 01 00 00 00 89 C2 C3";
long result = Disassemble(ola, multi_instructions, 0x10000000, 0, 32, 0);
if (result != 0) {
char* asm_code = (char*)result;
printf("多条指令: %s\n", asm_code);
// 多条指令以"|"连接
FreeStringPtr(ola, result);
}
返回值
长整数型,成功返回汇编语言字符串的指针,失败返回0。返回的字符串指针需要调用 FreeStringPtr 释放内存。
注意事项
- 返回的字符串指针需要调用 FreeStringPtr 释放内存
- 如果有多条指令,则每条指令以字符"|"连接
- showType=0时显示详细汇编信息,包括地址、机器码、汇编指令
- showType=1时只显示机器码
- 机器码输入格式为16进制字符串,空格可以忽略
- baseAddr参数用于计算相对地址和符号解析
