IDA有一个很漂亮的习惯,当它不知道什么是专用寄存器时,它只会减少寄存器的数量。尽管这一切都很好,但我希望能够在数据库中更正这些项目。我知道我可以调整[arch] .cfg文件;但是,这会将更改应用到该体系结构的所有处理器,但这并不总是正确的行为。相反,我只想更改正在使用的每个数据库的寄存器。
因此,我开始了IDAPython路径,可以轻松获取未命名的寄存器:
我遇到的问题是,我似乎找不到可以用来重命名它的IDAPython idc / idaapi / idautils函数。您知道什么能让我重命名这些项目的神奇的python酱吗?我一直在尝试在此处的官方文档中找到某些内容,但是没有任何运气。
更新:等效功能
如下所述,对于IDA API,这是“不可能的”(因为我的原始隐含声明中也提到了“我已阅读所有内容,但找不到解决方法。”下面的代码将为您提供相当多的信息……但是我找不到有效的方法实现它,所以我只是保留这个片段并根据需要对其进行修改,它提供了与“ RightClick-> Rename”相同的功能,您可以使用它为每个函数重命名给定的寄存器...可悲的是,这不是一个好方法处理整个数据库的方法。由于x86是我唯一可用的图像,因此对其进行了修改:
for r in range(220,240):
    uknName = get_reg_name(r,0)
    print("Got: '%s' for register %d ") % (unkName,r)
    if unkName is None:
        # I'd like to fix this but I can't
        # set_reg_name(r,<something I read from a file>)


评论

我有一个问题:您答案的意思是重命名寄存器名称?这样:mov eax,ebx;在编写脚本时:它将更改为mov asdfd,ebx?我认为它会像以前一样进行更改,但是当我在IDA 7.0 pro中使用它时,它不起作用。

您碰到了将近5岁的问题。答案的含义正好说明了该问题-它会重命名该函数的寄存器。 IDA python API已在5年内进行了更改,并且可能与以前不同,尽管我无法想象现在实现它有很大不同。此外,如果您使用的是Mac,则可能是rax而不是eax,因为它是64位的。

#1 楼

使用IDA C或IDA Python无法做到这一点。没有API函数可以重命名寄存器。检查文档:https://www.hex-rays.com/products/ida/support/idapython_docs/

评论


基本上我们已经找到了。我已经更新了“解决方案”,但这绝对不是理想的解决方案。

–悦
2015年2月25日在2:02