第2讲 编程基本概念(补充:C调用与堆栈)解析.ppt

第2讲 编程基本概念(补充:C调用与堆栈)解析.ppt

Agenda C语言函数调用堆栈框架 函数指针与回调函数 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间 函数调用框架 传递参数 保存返回地址 提供局部变量空间 等等 C语言编译器对堆栈的使用有一套的规则 了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统,特殊应用,代码注入等一些关键性代码的基础。 堆栈寄存器和堆栈操作 堆栈相关的寄存器 esp,堆栈指针(stack pointer) ebp,基址指针(base pointer) 堆栈操作 push 栈顶地址减少4个字节(32位) pop 栈顶地址增加4个字节 ebp在C语言中记录当前函数调用基址 esp ebp 高地址 低地址 esp 利用堆栈实现函数调用和返回 其他关键寄存器 cs : eip:总是指向下一条的指令地址 顺序执行:总是指向地址连续的下一条指令 跳转/分支:执行这样的指令的时候,cs : eip的值会根据程序需要被修改 call:将当前cs : eip的值压入栈顶,cs : eip指向被调用函数的入口地址 ret:从栈顶弹出原来保存在这里的cs : eip的值,放入cs : eip中 函数的堆栈框架 // 调用者 … call target … //建立被调用者target函数堆栈框架 pushl %ebp movl %esp, %ebp //拆除被调用者函数的堆栈框架 movl %

文档评论(0)

1亿VIP精品文档

相关文档