IDA如何计算堆栈变量偏移量?

How does IDA calculate stack variable offsets?

IDA 能够读取子程序的机器指令并显示存储在堆栈中的每个变量的相对偏移量。

我正在写一个分析堆栈内存的程序,我希望能够将存储在堆栈内存中的值放入它们各自的变量类型中。使 IDA 能够显示堆栈变量偏移量的幕后逻辑是什么?

感谢您的宝贵时间。

它通过查看堆栈地址的使用位置和方式从函数的代码中推断出这一点。比如,加载到一个 4 字节寄存器并进行算术运算可能意味着执行加载的堆栈内存属于某个 int 变量。

如果你想了解 IDA 算法的详细信息,我怀疑你能找到它。你可以看看 Avast 的 Retargetable Decompiler 开源项目,它执行的分析很像 IDA 并研究它的代码。