【问题标题】:How does IDA calculate stack variable offsets?IDA 如何计算堆栈变量偏移量?
【发布时间】:2018-01-14 19:02:59
【问题描述】:

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

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

感谢您的宝贵时间。

【问题讨论】:

    标签: stack reverse-engineering ida


    【解决方案1】:

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

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

    【讨论】:

    • 啊。好的,这是一组寻找事物的算法。谢谢!我不确定是不是那个,或者另一组数据保存在其他地方。 :)
    • 我会说这是一组启发式方法。也就是说,这些算法更多的是猜测而不是严格的规则。另一方面,从代码的不同位置传播由不同启发式发现的信息大大提高了分析的准确性。
    • 为了澄清,我主要是问堆栈变量偏移量是如何生成的。再次阅读我的问题让我意识到,也许您认为我只是在询问关于变量类型的问题?所以是的,只是想仔细检查一下,堆栈变量 offsets 也是一组 IDA 算法?
    • 找出变量类型几乎等于找出堆栈偏移量。如果您知道一个类型是 int,那么这意味着您可以从当前 SP 离开 sizeof(int) 并从下一个变量重新开始。
    • 您在函数指令中查找[SP] 操作数,当找到类似mov eax, [esp] ; add eax, 123 的内容时,您猜测ESP+0int,下一个起始偏移量是ESP+4
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2018-04-13
    • 2014-02-24
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多