多数情况下,要修改一个名称,只需单击想要修改的名称(使其突出显示),并使用快捷键 N 打开更名对话框

右击需要修改的名称,并在出现的上下文菜单中选择 Rename 选项,也可以更改名称

IDA Pro 权威指南学习笔记(十一) - 名称与命名

参数和局部变量

程序中的每个函数可能都有一个名为 arg_0 的栈变量,但没有一个函数拥有一个以上的 arg_0 变量

IDA Pro 权威指南学习笔记(十一) - 名称与命名

在栈变量处按快捷键 N 进行重命名栈变量

IDA Pro 权威指南学习笔记(十一) - 名称与命名

重命名后,IDA 会对当前函数中的每一个旧名称进行重命名

IDA Pro 权威指南学习笔记(十一) - 名称与命名

第一个的 var_18 修改为 var_2 后,之后的 var_18 也被修改为 var_2

如果想要恢复默认名称,将输入框置空,IDA 将会把变量名恢复到默认的名称

IDA Pro 权威指南学习笔记(十一) - 名称与命名

置空,点击 OK

IDA Pro 权威指南学习笔记(十一) - 名称与命名

var_2 恢复到 var_18

已命名的位置

重命名一个已命名的位置或给一个未命名的位置取名,使用快捷键 N 打开对话框

IDA Pro 权威指南学习笔记(十一) - 名称与命名

该对话框显示命名的具体地址,以及一些与该名称有关的特性

Local names 为局部名称

局部名称的作用域仅限于当前函数,局部名称的唯一性仅在某个给定的函数中有效

两个不同的函数可能含有完全相同的局部名称,但一个函数不可能包含两个完全相同的局部名称

在函数边界以外的已命名的位置不能被指定为局部名称,包括表示函数及全局变量的名称

局部名称最常用于为函数中的跳转目标提供符号名称,如那些与分支控制结构有关的名称

Include in names list 为包含在名称列表中

选择这个选项将有一个名称被添加到名称窗口中,当需要返回该名称所在位置时,就更容易找到这个名称

默认情况下,自动生成的名称(哑名)不包含在名称窗口中

Public name 为公共名称

通常,公共名称是指由二进制文件(如共享库)输出的名称

在最初加载数据库的过程中,IDA 的解析器会在解析文件头的同时查找公共名称

选择这个特性,会强制 IDA 将一个符号看成是公共名称,这样除了给反汇编代码清单和名称窗口中的名称添加公共注释外,不会对反汇编代码造成任何影响

Autogenerated name 为自动生成的名称

这个特性不会对反汇编代码产生任何明显的影响,选择它并不会使 IDA 自动生成一个名称

Weak name 为弱名称

弱符号(weak symbol)是公共符号的一种特殊形式,只有没有找到相同名称的公共符号来重写时,才会使用弱符号

Create name anyway 为无论如何都要创建名称

在函数以外(全局范围内),不能有两个位置使用相同的名称

如果在全局范围内编辑一个名称(如函数名称或全局变量),并且尝试分配一个数据库中已经存在的名称,IDA 会显示名称冲突对话框

IDA Pro 权威指南学习笔记(十一) - 名称与命名

同时 IDA 会自动生成一个唯一的数字后缀,以解决冲突

无论是否选择Create name anyway选项,这个对话框都会出现

如果编辑某个函数中的一个局部名称,并且尝试分配一个已经存在的名称,默认情况下,IDA 会拒绝这种尝试

如果一定要使用这个名称,必须选择 Create name anyway 选项,来强制 IDA 为局部名称生成一个唯一的数字后缀

寄存器名称

如果编译器选择将变量分配到寄存器中而不是程序栈上,并且想要使用一个比 EDX 更恰当的名称来引用这个变量,这时重命名寄存器才有用

使用快捷键 N,或右击寄存器名称并在出现的菜单中选择 Rename,打开“寄存器重命名”对话框

重命名寄存器时,实际上是提供了一个别名,并使用它在当前函数执行期间引用该寄存器

IDA 甚至在函数开始部分用 alias=register 语法来表示这个别名

如果一段代码不属于某个函数,就不能重命名这段代码中的寄存器

相关文章: