ski*_*ppy 4 c c++ buffer-overflow segmentation-fault
在从函数A()调用函数B()期间,B()分配一个100-char数组并多次填充,包括一次使用101个字符的字符串,一次使用110个字符的字符串.这是一个明显的错误.
之后,函数A()尝试访问完全不相关的int变量i,并发生分段错误.
我理解为什么会发生缓冲区溢出,但为什么在访问此整数时会出现分段错误?为什么我不简单地得到垃圾数据?
当A()调用时B(),B的前导码指令保存A的帧指针 - 堆栈中A保持局部变量的位置,然后用B自己的帧指针替换它.它看起来像这样:
![]()
当B超出其局部变量时,它会混淆将重新加载到帧指针中的值.这是垃圾作为帧指针值,因此所有A的局部变量都被删除.更糟糕的是,未来对局部变量的写入会混淆属于其他人的内存.