《逆向工程核心原理》学习总结(二) - 栈帧

栈帧的三个基本职能

  • 声明局部变量
  • 传递函数参数
  • 保存函数返回地址
    利用ebp(栈帧指针)寄存器可实现:
  • 访问栈内局部变量
  • 提取传递参数
  • 访问函数返回地址

栈帧的生命周期

helloworld程序main()函数的汇编代码:

《逆向工程核心原理》学习总结(二) - 栈帧_第1张图片
main函数栈帧生成:

push ebp;保存上层调用函数的栈帧指针
mov ebp, esp; main函数的栈帧指针赋值为esp的值

main函数栈帧清除:

leave;
leave指令等价于两条基本汇编指令:
mov esp,ebp; 清除main函数栈空间
pop ebp;还原上层函数栈帧指针

利用ebp访问ret地址、局部变量、函数参数

[ebp+4] ;ret地址
[ebp]; 保存的上层函数栈帧指针
[ebp+8]; 传递的第一个参数
[ebp+C];传递的第二个参数

[ebp-4];第一个局部变量
[ebp-8];第二个局部变量

main函数生成栈帧后的栈空间图

你可能感兴趣的:(逆向工程)