我正在尝试建立一个二进制重写框架。我正在使用Capstone分解二进制文件,然后由Keystone对其进行汇编。 Keystone将输出编码数据,他将其称为已编译代码。我想知道如何通过执行Keystone的输出来验证此拆卸/组装过程。但是我不知道如何将编码后的数据转换为可执行文件?我正在使用32位X86 Fedora(linux)操作系统。 换句话说,我猜Keystone的输出是机器代码。我该怎么办?
这是我用于使用Keystone组装汇编代码的代码的一部分:
if (ks_asm(ks, CODE, 0, &encode, &size, &count) != KS_ERR_OK) {
printf("ERROR: ks_asm() failed & count = %lu, error = %u\n", count, ks_errno(ks));
} else {
size_t i;
printf("%s = ", CODE);
for (i = 0; i < size; i++) {
printf("%02x ", encode[i]);
}
printf("\n");
printf("Compiled: %lu bytes, statements: %lu\n", size, count);
}
这是完整示例的链接: Keystone's showcase