本文仅作自己的学习记录,以防丢失或忘记,不属于教程,所以请无视这篇文章。日后再根据情况整理。
1.函数调用过程很重要,大致是 主函数把待传入的参数压栈 -> 返回地址压栈-> 修改ip来到子函数代码 -> EBP压栈 -> ESP赋给EBP(逻辑上开辟一段新栈) -> 存放子函数变量等子程序用到的资源。
调用完毕回到主函数的过程与之相反,EBP赋给ESP(即把ESP拉到新栈栈空位置,丢弃新栈内容) -> EBP出栈(还原旧栈) -> 跳转到返回地址。
所以新栈的结构图为:
(低地址)
子函数变量
EBP
return address
传入参数
主函数原栈
(高地址)
2.IDA中变量名写在最低地址的内存旁边。例如有一个变量buff占3字节,从01A到01C。01D是变量B。那么IDA显示
01A buff
01D B