c++反汇编学习笔记
1.函数调用过程
现在都知道,调用函数的时候直接push参数,然后call到对应的地址,那么看下面这张图,2是第二个参数,因为参数是从右向左入栈,(这样能保证第一个参数是在低地址),1上面的是调用函数之前的ip,再往上看就是push ebp,也就是之前的ebp值,然后再将sp的值赋给ebp,之后提升堆栈(为了存储函数中的局部变量),提升完了以后保留bx si di一个一个push。
缓冲区是用cc填充的,那么cc是什么东西呢,比如说调试程序时候下的断点就是cc,这样懂了吧,这样子设计如果说再函数运行过程中,函数内部访问了未被初始化的地方那么程序就会停止。
讲一下缓冲区利用,按照上面的介绍,可以想象到,如果函数运行完了,那么缓冲区里面存储的东西是不变的,那么就可以利用里面的值的信息。还有就是修改函数返回地址,这样能够跳到指定的地方。
再来说一下全局变量,全局变量在程序编译的时候就被赋予了一个独一无二的内存编号。
像这个图上面一样,其中x就是一个全局变量,按照调试信息给出的那个地址可以找到对应的变量。
再补充一点就