c - 雷达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 插件吗?通常我看到两者都可用于支持的架构。
解决方案
实施虚拟肛门插件足以防止出现此警告。我添加了以下功能并将其传递给新插件:
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
推荐阅读
- javascript - Touch、Scroll、Intersection观察者回调的执行顺序
- c# - Newtonsoft.JSON,将相似的不同JSON字段反序列化为单一类型,但将具有不同的反序列化对象字段
- opengl - GLM四元数反向偏航
- javascript - 为什么我在调用函数时没有得到输入?
- java - 如何处理 java.lang.IllegalStateException 的异常,当服务器抛出 http-listener max-parameters 的异常时限制在 wildfly 上的交叉
- machine-learning - 将 google colab 与 google drive 一起使用时出现输入/输出错误
- assembly - Clion 中的嵌入式汇编程序块
- github - 无法构建 Git Bash Jekyll 站点
- java - 如何在点击时生成新活动
- list - 没有显式递归的两个列表的并集和交集