COPY内存的问题.

wo_deaizainali 2008-03-21 08:56:08
.data
szlstr dword ?
invoke RtlMoveMemory,addr szlstr,lpstr,15
有个问题想不明白,szlstr定义的是dword四个字节,我COPY 15个字节进去,为什么会对呢,我想不明白,麻烦各位老大讲解讲解
...全文
103 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-03-22
  • 打赏
  • 举报
回复
15是你通过参数传给RtlMoveMemory的。
用户 昵称 2008-03-22
  • 打赏
  • 举报
回复
数据区并不是溢出就肯定会出错的,你可以定义一个 变量 a[ 1 ],你用a[ 1 ] = 9;并不一定错。

wo_deaizainali 2008-03-22
  • 打赏
  • 举报
回复
还有一个问题,我也很想不明白,为什么我读任何地址的时候,比如上面的,我读取szlstr的数据,他是怎么知道我要读15个字节呢.取其他内存地址数据也一样,为什么电脑知道我要读取多少字节呢.
cnzdgs 2008-03-22
  • 打赏
  • 举报
回复
上面看错了,你这两个变量长得太像了。
addr szlstr是取szlstr的地址(指针),lpstr是一个指针变量。
RtlMoveMemory函数中并不知道也不管传过来的地址是指向什么类型数据的,你指定多少长度它就移动多少。
这样的写法会导致内存使用溢出,szlstr之后的11字节内存会被覆盖,如果被覆盖的数据未使用或者不重要则看不出问题。
wo_deaizainali 2008-03-21
  • 打赏
  • 举报
回复
我顶啊,高手来帮帮忙解释解释啊
.data
szlstr dword ?
invoke RtlMoveMemory,addr szlstr,lpstr,15
有个问题想不明白,szlstr定义的是dword四个字节,我COPY 15个字节进去,为什么能成功COPY进去呢?
wo_deaizainali 2008-03-21
  • 打赏
  • 举报
回复
这个解释不对吧,我不觉得szlstr这个是指针,难道RtlMoveMemory是COPY的指针.
cnzdgs 2008-03-21
  • 打赏
  • 举报
回复
szlstr是一个指针变量,其内容是一个内存地址。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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