【发布时间】:2018-01-14 19:02:59
【问题描述】:
IDA 能够读取子程序的机器指令并显示存储在堆栈中的每个变量的相对偏移量。
我正在编写一个分析堆栈内存的程序,我希望能够将存储在堆栈内存中的值放入它们各自的变量类型中。使 IDA 能够显示堆栈变量偏移量的幕后逻辑是什么?
感谢您的宝贵时间。
【问题讨论】:
标签: stack reverse-engineering ida
IDA 能够读取子程序的机器指令并显示存储在堆栈中的每个变量的相对偏移量。
我正在编写一个分析堆栈内存的程序,我希望能够将存储在堆栈内存中的值放入它们各自的变量类型中。使 IDA 能够显示堆栈变量偏移量的幕后逻辑是什么?
感谢您的宝贵时间。
【问题讨论】:
标签: stack reverse-engineering ida
它通过查看堆栈地址的使用位置和方式从函数代码中推断出这一点。例如,加载到 4 字节寄存器并进行算术运算可能意味着执行加载的堆栈内存属于某个 int 变量。
如果你想了解 IDA 算法的详细信息,我怀疑你能找到它。您可以查看 Avast 的 Retargetable Decompiler 开源项目,该项目执行与 IDA 类似的分析并研究其代码。
【讨论】:
int,那么这意味着您可以从当前 SP 离开 sizeof(int) 并从下一个变量重新开始。
[SP] 操作数,当找到类似mov eax, [esp] ; add eax, 123 的内容时,您猜测ESP+0 是int,下一个起始偏移量是ESP+4。