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