在 IDA 中反转变量原点(指针链)。卡在 RUNTIME_FUNCTION XREF 上

逆向工程 艾达 视窗
2021-06-26 08:37:20

因此,过去几个月我一直在探索逆向工程,目前我正在逆向转储的可执行文件,它似乎是完整的

我偶然发现了一些我似乎无法理解/理解的东西。当我向上反转以找出函数中某些变量的来源时,我大部分时间都在RUNTIME_FUNCTION外部参照处结束我被困在这里,因为我不能再往上爬了。

我的最终目标是找出从静态地址到某些函数中使用的目标变量的整个指针链。我开始从某个指令向上搜索并遵循某个变量,但不幸的是,RUNTIME_FUNCTION当我深入 3 个级别时,我会找到参考文献。

我读过运行时函数与 SEH 有关。但是我在 IDA 中找不到关于这个 RUNTIME_FUNCTION 的任何构造信息。某些变量不应该总是导致 .data 部分中的某个静态地址吗?有人知道这里发生了什么吗?

在这张图片中你可以看到,当我想弄清楚哪些引用/使用这个函数时,我只得到了那些 RUNTIME_FUNCTION 的: 在此处输入图片说明

您通常如何解决这个问题以回到正轨并进一步/超越 RUNTIME_FUNCTION?

可执行部分: 在此处输入图片说明

任何帮助表示赞赏,谢谢!

2个回答

RUNTIME_FUNCTION编译器为正确的 win64 可执行文件中的所有函数添加的系统结构它仅在处理异常时由操作系统使用,因此它与您的游戏变量无关。您应该忽略这些外部参照并查看其他地方。

某些变量不应该总是导致 .data 部分中的某个静态地址吗?

在程序集级别没有变量的概念。我们在寄存器和内存中获得了位大小的字段。

按照惯例,编译器为全局和静态变量指定 .data 部分。函数内的所有内容主要在堆栈上处理。

您通常如何解决这个问题以回到正轨并进一步/超越 RUNTIME_FUNCTION?

请理解,IDA 不会为您做数据流分析,但它会查找交叉引用。所以这不是数据的来源,而是引用它的东西。

您要做的是将数据流追溯到其源头。数据流分析看起来有点像这样:

在此处输入图片说明

您应该做的是利用您对调用约定的了解来了解数据是如何在函数之间传递的。如果你能对你的问题更具体,我相信你会得到不那么笼统的答案。