CopyMemory时如果越界访问会怎么样?

大国工匠007 2011-12-21 11:38:58
拷贝的数据大于实际数据大小,会导致内存泄漏吗?
...全文
92 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大国工匠007 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 echoyin59 的回复:]
目标数据足够大,但是元数据长度比较小。
应该是拷贝源数据到目标数据,但是你按照目标数据的大小来拷贝源数据肯定不对啊
[/Quote]
确实不对,但是会导致什么后果呢?我主要是想问这个。
诶呦 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuxindashi 的回复:]
目标数据是足够大了,但源数据长度比较小,但确是按照目标数据的大小拷贝的。
现在程序内存不断上升的BUG,不知道会不会跟这个有关……
[/Quote]
目标数据足够大,但是元数据长度比较小。
应该是拷贝源数据到目标数据,但是你按照目标数据的大小来拷贝源数据肯定不对啊
大国工匠007 2011-12-21
  • 打赏
  • 举报
回复
目标数据是足够大了,但源数据长度比较小,但确是按照目标数据的大小拷贝的。
现在程序内存不断上升的BUG,不知道会不会跟这个有关……
Eleven 2011-12-21
  • 打赏
  • 举报
回复
崩溃吧~
yayafu 2011-12-21
  • 打赏
  • 举报
回复
会的,而且程序的表现形式会多种多样。
gameslq 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaohuh421 的回复:]

这个要看情况:
1.目标没有越界,源越界. 即读取越界了,写并没有越界. 这时只是越界读取的部分数据不定,不会让程序崩溃
(注:除非读取了系统保护的内存地址,读取系统保护的内存地址程序会崩溃的)

2.目标越界,即写越界了.
这时又分,目标缓冲区位置.
比如目标缓冲区是在栈上分配的,又越界了,即会破坏的栈内容,这时程序多半会崩溃.
目标缓冲区位于堆中,或者静态数据区……
[/Quote]

分析的不错
lgstudyvc 2011-12-21
  • 打赏
  • 举报
回复
msdn有木有
The first parameter, Destination, must be large enough to hold Length bytes of Source; otherwise, a buffer overrun may occur. This may lead to a denial of service attack against the application if an access violation occurs or, in the worst case, allow an attacker to inject executable code into your process. This is especially true if Destination is a stack-based buffer. Be aware that the last parameter, Length, is the number of bytes to copy into Destination, not the size of the Destination.
诶呦 2011-12-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuxindashi 的回复:]
引用 3 楼 echoyin59 的回复:
目标数据足够大,但是元数据长度比较小。
应该是拷贝源数据到目标数据,但是你按照目标数据的大小来拷贝源数据肯定不对啊

确实不对,但是会导致什么后果呢?我主要是想问这个。
[/Quote]
崩溃啊
你源数据大小没有那么大
xiaohuh421 2011-12-21
  • 打赏
  • 举报
回复
这个要看情况:
1.目标没有越界,源越界. 即读取越界了,写并没有越界. 这时只是越界读取的部分数据不定,不会让程序崩溃
(注:除非读取了系统保护的内存地址,读取系统保护的内存地址程序会崩溃的)

2.目标越界,即写越界了.
这时又分,目标缓冲区位置.
比如目标缓冲区是在栈上分配的,又越界了,即会破坏的栈内容,这时程序多半会崩溃.
目标缓冲区位于堆中,或者静态数据区中.
这时可能会破坏后其后面的正常数据,导致不可知的错误. 比如被破坏的数据正好是某个数据的指针,那么这个指针被改变了,当然程序肯定会出错,可能就会崩溃.

所以读取越界后果可能不会有多严重,但是写越界后果就比较严重了,甚至是致命的.
所以你的MSDN中,有多关于串操作的新版本函数都多了一个目标缓冲区大小,这个参数.

比如以前的函数; strcpy();参数就只有两个缓冲区指针
但是新版的strcpy_s()就多了一个目标缓冲区大小的参数,就是为了提高安全性

16,472

社区成员

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

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

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