交叉引用深度
我们之前介绍过交叉引用的基本用法,但在某些情况下,它们可能不会如您所期望的那样表现。
访问大型数据项
如果有一个大型结构体或数组,代码在其中深层次地读取或写入数据,您可能不会在结构体定义中看到来自该代码的交叉引用。
示例
例如,在Microsoft CRT函数__report_gsfailure
中,有对ContextRecord
变量(一个_CONTEXT
结构体实例)的字段_Rip
和_Rsp
的写入,但如果我们检查ContextRecord
的交叉引用,我们不会看到这些写入被列出。
这是因为这些字段距离结构体的起始位置较远(偏移量为0x98
和0xF8
)。
作为一种速度优化,IDA仅检查对大型数据项的直接访问,深度有限。默认值是16(0x10),因此任何超出该偏移量的访问将不会显示。可以通过选项 > 常规… 交叉引用选项卡更改当前数据库的值。
例如,将其设置为256后,对_Rip
和_Rsp
的访问在ContextRecord
的交叉引用中显示出来:
要更改所有新数据库的限制,请在ida.cfg
中更改参数MAX_TAIL
。
学习资源
立即关注【二进制磨剑】公众号
原文始发于微信公众号(二进制磨剑):IDA技巧(97)cross-reference-depth
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论