(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调试过程中