【深入浅出】分析strcpy导致栈溢出的具体原因

                 (a)IDA看到的伪代码                                                                          (b)c语言的代码

可以看到在当前函数中,所有局部变量都存储在栈内,

        当前函数ebp=0018FAEC,

        v4(即authenticated)位于ebp-4h位置(即0018FAE8),

        v3(即buffer[8])位于ebp-ch位置,给了他8个字节的空间,v3的地址&v3即是0018FAE0,

18FA90-18FA88记录了strcpy函数在栈内操作的变化,可以看到直接把a1的值赋给了a3,而由于a3其实位于栈上,并且strcpy没有限制a1要复制的长度,所以会有可能造成栈溢出覆盖当前函数ebp(存储了上个函数的ebp的地址)及返回地址。

                                                                                      (c)OllyDbg调试过程中

发布了49 篇原创文章 · 获赞 26 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_36711901/article/details/105176933