有没有办法用脚本在 IDA pro 中设置特殊用途寄存器的数量?

逆向工程 拆卸 艾达 蟒蛇
2021-06-13 09:09:18

IDA 有一个很好的习惯,当它不知道什么是特殊用途寄存器时,它只会减少寄存器的数量。虽然这一切都很好,但我希望能够在我的数据库中更正这些项目。我知道我可以调整 [arch].cfg 文件;但是,这将更改应用于该架构的所有处理器,这并不总是正确的行为。相反,我只想更改我正在处理的每个数据库的寄存器。

所以我开始了 IDAPython 路径,我可以轻松获得未命名的寄存器:

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>)

我遇到的问题是我似乎找不到可以用来重命名它的 IDAPython idc/idaapi/idautils 函数。你知道什么神奇的蟒蛇酱可以让我重命名这些项目吗?我一直试图在这里的官方文档中找到一些东西,但没有任何运气。

更新:等效功能

如下所述,这对于 IDA API 来说不是“可能的”(正如我在“我阅读了所有这些内容但找不到方法”的原始隐含声明中所指出的那样。以下代码将为您提供相当多的信息.​​.....但我还没有找到一种有效的方法来实现它,所以我只是保留这个片段并根据需要对其进行修改。它提供与您的“RightClick-> Rename”相同的功能可以用来为每个函数重命名给定的寄存器......遗憾的是,这不是创建整个数据库的好方法。因为 x86 是我唯一可用的图像,所以它被搞砸了:

ea = ScreenEA()
func = idaapi.get_func(ea)
regvar = idaapi.find_regvar(func, ea, "eax")
# print(var_dump(regvar))
# associated "rename variable" magic
idaapi.rename_regvar(func, idaapi.find_regvar(func, ea, "eax"), "asdfd")
1个回答

这不能用 IDA C 或 IDA Python 来完成。没有用于重命名寄存器的 API 函数。检查文档:https : //www.hex-rays.com/products/ida/support/idapython_docs/