IDA 的函数列表窗口几乎是使用频率最高的窗口之一,但即使你每天都使用它,有些事情你可能没有意识到。
模态版本
通过 Jump > Jump to function… 或者 Ctrl + P 快捷键来打开,模态对话框可让您查看列表的完整宽度并进行一些快速导航,例如:
-
要跳转到当前函数的开头,请使用 Ctrl-P,然后按下 Enter; -
要跳转到上一个函数,请使用 Ctrl–P、Up、Enter(也可用作 JumpPrevFunc 操作:默认快捷键是 Ctrl–Shift–Up); -
要跳转到下一个函数,请使用 Ctrl–P、Down、Enter(也可用作 JumpNextFunc 操作:默认快捷键是 Ctrl–Shift–Down)。
函数列表的列
从第二张屏幕截图中可以看出,“函数”列表的列数比“函数名称”多得多,而“函数名称”通常是唯一可见的列。
通过单击某一列,您可以要求 IDA 对该列上的整个列表进行排序。
例如,您可以按大小对函数进行排序以查找最大的函数 - 函数越大,出现错误的可能性就越大;或者您可能会寻找具有最大局部区域的函数,因为它可能在堆栈上有许多缓冲区,这意味着潜在的溢出。
如果对列表进行排序或过滤,您可能会在“输出”窗口中看到以下消息:
Caching 'Functions window'... ok
由于排序需要整个列表,IDA 将在所有可能改变列表变化的操作之后,重新获取并排序列表,在大型数据库上,这可能会变得相当慢,因此一旦您不再需要排序,最好使用上下文菜单中的“取消排序”。
同步
通过从上下文菜单中选择“Turn on synchronization”,可以使列表与反汇编同步。
启用后,当您在数据库中导航时,列表将滚动到当前函数。
如果您希望在列表中看到特定功能,无论您位于列表中的哪个位置,也可以将其关闭。
目录
从 IDA 7.5 开始,可以使用文件夹来组织您的函数。
要启用,请在上下文菜单中选择“Show folders”,然后选择“Create folder with items…”将所选项目分组到一个文件夹中。
颜色和样式
列表中的某些功能可能带有颜色。在大多数情况下,颜色与导航栏中的图例相匹配:
-
青色:库函数(即由 FLIRT 签名识别为编译器运行时库函数的函数)。 -
Magenta/Fuchsia:外部函数 thunk,即在外部模块(通常是 DLL 或共享对象)中实现的函数。 -
石灰绿:从 Lumina 数据库检索元数据的函数。
但也有其他的:浅绿色:函数标记为反编译 其他:具有手动设置颜色的功能(通过编辑功能......或插件/脚本)
您还可能会看到以粗体标记的函数。
这些函数具有已定义的原型(即参数类型、返回值和调用约定)。
原型可以由用户定义(Y 键),也可以由加载器或插件设置(例如来自 DWARF 或 PDB 调试信息)。
批量选中函数
通过选择多个项目,您可以对所有项目执行一些操作,例如:
-
批量删除函数: 通过从数据库中删除函数信息(名称、边界)来删除所选函数。先前属于这些函数的指令仍然保留,因此这可能很有用,例如,对于组合不正确拆分的函数。 -
批量添加断点:向所有选定函数的第一条指令添加断点。这对于发现当您触发正在调试的程序中的特定功能时执行哪些函数非常有用。 -
Lumina:你能够推送或拉取选中函数的 metadata。
原文始发于微信公众号(二进制磨剑):IDA 技巧(28)function list
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论