设为首页 加入收藏

TOP

C语言中数据类型不一致导致安全性漏洞-memcpy()的参数 int 与 unsigned
2014-11-24 08:10:21 来源: 作者: 【 】 浏览:1
Tags:言中 数据 类型 一致 导致 安全性 漏洞 -memcpy 参数 int unsigned

//库函数memcpy()的声明
void *memcpy(void *dest, void *src, size_t n);


//核心内存区域,拥有用户可访问的数据
#define KSIZE 1024
char kbuf[KSIZE];


//最多可以从核心内存中向用户内存区复制maxlen字节的数据
int copy_from_kernel(void *user_dest, int maxlen){
//所复制的字节数是缓冲区大小与maxlen中的较小者。
int len = KSIZE < maxlen KSIZE : maxlen;
memcpy(user_dest, kbuf, len);
return len;
}


copy_from_kernel() 与 memcpy()的长度参数类型不一致,一个int 型,另一个是size_t(实际上是unsigned int)。如果有恶意程序员在调用copy_from_kernel()时将长度参数设置为负数,那么memcpy()会把它当成一个很大的正数。虽然等复制这么多(至少231个) 实际上不会完成,因为程序会遇到进程中非法地址的错误,但是程序还是能读到没有被授权的内核存储器区域。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇标准C语言<string.h>中的st.. 下一篇C语言判断两个整数相加会不会溢出

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)