您的位置:首页 > 其它

自己写一个strcpy(char*dest,char*src),如何在函数内部实现防御性溢出?

2006-08-25 17:45 921 查看
自己写一个strcpy(char*dest,char*src),如何在函数内部实现防御性溢出?



void strcpy(char*dest, char*src)
{
while (*dest != '/0' && *src != '/0')
{
*(dest++) = *(src++);
}
}

char *strcpy(char *strDestination, const char *strSource);
{
assert((strDestination!=NULL) && (strSource !=NULL));
char *address = strDestination;
while( (*strDestination++ = * strSource++) != '/0') NULL ;
return address ;
}

//以下是高质量C++编程指南上面的解答,楼主参考一下:
char* strcpy(char*strDest,const char*strSrc)
{
assert(strDest!=NULL&&strSrc!=NULL); //2分
char* address=strDest; //2分
while(*(strDest++)=*(strSrc++)!='/0') //2分
   NULL;
return address; //2分
}

IsBardReadPtr判断源可读否?
IsBadWritePtr 判断目标地址是否可写,
但这样并不很保险



strcpy() 函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目。复制字符的数目直接取决于源字符串中的数目。如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中!

如果知道目的地缓冲区的大小,则可以添加明确的检查:

if(strlen(src) >= dst_size) {
/* Do something appropriate, such as throw an error. */
}
else {
strcpy(dst, src);
}

也可以用
strncpy()
代替strcpy()
strncpy(dst, src, dst_size-1);
dst[dst_size-1] = '/0';



确保 strcpy() 不会溢出的另一种方式是,在需要它时就分配空间,确保通过在源字符串上调用 strlen() 来分配足够的空间。例如:

dst = (char *)malloc(strlen(src));
strcpy(dst, src)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐