首页 > 解决方案 > 雷达2:r_reg_get:断言'reg && name'失败(第296行)

问题描述

我正在为radare2 开发asm 插件。我实现了反汇编功能,因此它使用以下方法返回反汇编指令:

r_strbuf_set (&op->buf_asm, line);

现在,当我设置asm.arch为我的新架构时,我可以通过键入来查看行变量的内容pd。但是,在打印反汇编程序之前,我收到一堆警告说:

WARNING: r_reg_get: assertion 'reg && name' failed (line 296)

这发生在我的反汇编函数完成后,对于用我的代码处理的每条指令。这种错误的根源可能是什么?它似乎与操作码结构无关,我正在填写,而是与寄存器名称有关。除了 asm 插件之外,还需要实现 anal 插件吗?通常我看到两者都可用于支持的架构。

标签: creverse-engineeringdisassemblyradare2

解决方案


实施虚拟肛门插件足以防止出现此警告。我添加了以下功能并将其传递给新插件:

static int mycpu_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *b, int len) {
  r_strbuf_init (&op->esil);
  op->size = 4;
  return op->size;
}

后来指出如下:

RAnalPlugin r_anal_plugin_mycpu = {
    .name = "mycpu",
    .desc = "Long name",
    .license = "LGPL3",
    .bits = 32,
    .op = &mycpu_op
}

#ifndef R2_PLUGIN_INCORE
R_API RLibStruct radare_plugin = {
    .type = R_LIB_TYPE_ANAL,
    .data = &r_anal_plugin_mycpu,
    .version = R2_VERSION
};
#endif

推荐阅读