标签:getc 实践 返回值 tchar 返回 img lag rcp buffer
#include <stdio.h> #define PASSWORD "1234567" int verify_password(char *password) { int authenticated; char buffer[8]; authenticated = strcmp(password,PASSWORD); strcpy(buffer,password); //溢出就在这里 return authenticated; } void main() { int valid_flag =0; char password[1024]; while(1) { printf("please input password: "); scanf("%s",password); valid_flag = verify_password(password); if (valid_flag !=0) { printf("incorrect password!\n\n"); } else { printf("Congratulation! You have passed the verification!\n"); break; } } getchar(); }
在xDbg中 加载后 在strcpy(buffer,password);这句后加断点 查看ESP中的内存
发现字符串最后一个反斜杠0刚好淹没在返回值上 所以输入8个ascll字符会返回验证成功
原理图
标签:getc 实践 返回值 tchar 返回 img lag rcp buffer
原文地址:http://www.cnblogs.com/yifi/p/6274342.html