memcpy

fangchao918628 2011-03-23 02:38:14
void *memcpy(
void *dest,
const void *src,
size_t count
);
这个如果count 大于dest的大小,使用的时候会造成写溢出;
如果count 大于src的大小的时候,会造成读溢出;
这个读溢出会出现什么后果?
我的想法是即使将不该有的东西读到没用的东西到dest里面去了也应该没什么关系,字符串以\0为结束,只要\0在里面就没问题,只是些脏了\0后面的内存.
...全文
252 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Waistcoat21 2011-03-23
  • 打赏
  • 举报
回复
缓冲区溢出,微软的很多漏洞就是这样导致。

一般错误显示可能是非法内存访问,普通软件一般没啥大的影响,如果是系统的API有这样的错误在里面,恶意软件就可以构造一个缓冲区溢出的shellcode。具体你可以Google关键字shellCode.
Bit_bbtt 2011-03-23
  • 打赏
  • 举报
回复
ZeroMemory(pDest, 20);笔误
Bit_bbtt 2011-03-23
  • 打赏
  • 举报
回复
我举个第一条的例子,让lz加深印象:
char *pDest = new char[20];
char szSrc[] = "1111111111111111111111111111111111111111111111111111";
ZeroMemory(pDest, 0);
memcpy(pDest, szSrc, 30);
//如果你在某处想释放这个pDest,即
delete [] pDest;//程序会崩溃的
klopow 2011-03-23
  • 打赏
  • 举报
回复
谁调用谁检查
zyyeung 2011-03-23
  • 打赏
  • 举报
回复
memmove
ggg_sss_lll 2011-03-23
  • 打赏
  • 举报
回复
这个memcpy函数内没有效验吗?
对于非法的调用抛异常
如果没有一点预防措施,那不符合传统编程思想啊:(
fangchao918628 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tandyt 的回复:]
只要你的 count 超过 dest大小 或 src 大小 中的一个,运行起来时,不一定会立刻出错,但是随时会崩溃!

系统禁止访问的内存地址,一旦你的程序企图进行读写操作,会导致程序崩溃。

最好还是别冒这个险。研究问题可以,但应用上还是避免吧。
[/Quote]
我自己用的时候我一般都会注意的,只是想了解下,多知道点
fangchao918628 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]


应该就是读了垃圾数据了
[/Quote]
哦,我想知道还有其它情况么,以前很少用到这个API,所以问下,还会出现其它情况么,多学习学习
TandyT 2011-03-23
  • 打赏
  • 举报
回复
只要你的 count 超过 dest大小 或 src 大小 中的一个,运行起来时,不一定会立刻出错,但是随时会崩溃!

系统禁止访问的内存地址,一旦你的程序企图进行读写操作,会导致程序崩溃。

最好还是别冒这个险。研究问题可以,但应用上还是避免吧。
Eleven 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fangchao918628 的回复:]
第二条明白,第一条逻辑错误,是什么样子的了?不是很理解,能举个例子么,谢谢
[/Quote]
应该就是读了垃圾数据了
vnking 2011-03-23
  • 打赏
  • 举报
回复
楼主的电脑运行楼主的软件,溢出与否自己决定。
King_hhuang 2011-03-23
  • 打赏
  • 举报
回复
memcpy这个函数,其作用就是复制一个指定大小的内存块到制定的内存块中。最好你还是不要异常,否则可能有些你意想不到的惊喜哦!
fangchao918628 2011-03-23
  • 打赏
  • 举报
回复
第二条明白,第一条逻辑错误,是什么样子的了?不是很理解,能举个例子么,谢谢
jackson35296 2011-03-23
  • 打赏
  • 举报
回复
memcpy又不光是拷贝字符串的,和\0无关。读溢出的后果有两点:一是多了很多垃圾信息,造成逻辑错误。二是造成程序崩溃,因为有些内存是禁止读的,读到这些禁止读的内存会造成崩溃或抛异常。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧