代码:
#include <stdio.h>
#include <string.h>
void fun(const char* input)
{
char buf[8];
printf("My stack look like:\n%p\n%p\n%p\n%p\n%p\n%p\n%p\n\n");
strcpy(buf,input);
printf("%s\n",buf);
printf("New stack look like:\n%p\n%p\n%p\n%p\n%p\n%p\n%p\n\n");
}
void haha(void)
{
printf("OK! If your see this, means Hack Done!");
}
int main(int argc, char* argv[])
{
printf("address of foo=%p\n",fun);
printf("address of bar=%p\n",haha);
fun(argv[1]);
return 0;
}
我测试的效果:
![](http://hiphotos.baidu.com/luckily513/pic/item/35395f03978993b009fa9328.jpg)
其中,最上面两行是buf[8],第三行是保存的EBP,再下面一行就是返回地址,strcpy()溢出覆盖返回地址造成执行其它代码。
刚刚试验成功,留个文章做纪念。
编译环境:VC 6++,禁止优化(我原来用的是VS2008,但昨天晚上怎么配置都没配置成功,今天换上VC6就没事了)