关于这个东东RtlZeroMemory
研究到win32汇编窗口时,其它部分基本能理解,就是这个RtlZeroMemory东东,不知道是用来干什么的,它有两个参数,第一个参数是取窗口类的首地址,第二个参数是窗口类结构的大小。高手来给我讲讲啊 清零一块内存空间···· 是不是给wndclass节构腾出一块内存空间 讲详细点呀,大哥 原来是把一块内存空间填O,因为结构中有的一些地方不填O且又不初始化,里面的数据可能是拉级数据,这样解释大家都懂 ;P小B同学 这个名字 太有爱了 深有甲鱼老师风范啊好了 进入正题吧
xor eax,eax ;要将这块内存的每个单元要初始化的数值 送入eax
mov edi,offset szString ;获取这块内存的地址 送去edi
mov ecx,dwStingSize ;这块内存的要初始化的长度 送去ecx
cld ;CLD使DF复位,即DF=0
rep stosb ;重复覆盖掉edi所指向的单元
REP ;CX<>0 重复执行字符串指令
汇编指令stosb,stosw,stosd,分别是把AL,AX,EAX的内容存储到EDI所指的内存单元中,同时根据EDI的值根据方向标志增加或减少,可配合指令REP一起使用
另外:汇编指令MOVSB,MOVSW,意思是搬移一个字节或一个字,它是把 DS:SI 所指地址的一个字节搬移到 ES:DI 所指的地址上,搬移后原来的内容不变,但是原来 ES:DI 所指的内容会被覆盖而且在搬移之后 SI 和 DI 会自动的指向下一个要搬移的地址。
okay这些是本质的原理那么在继续看几个类似的API函数吧 :lol突然发现上面的 esi变笑脸了 - -
RtlMoveMemory 移动内存 ----> ?--->movsb
RtlFillMemory 填充内存块 --->eax = ? ---->stosb
RtlZeroMemory 以0填充内存块-->eax = 0 ----->stosb如果是sw,sd的话 那样计数的方式就不一样了
okay 想必lz 应该现在有一个更加清楚的认识了吧 :o学习了,有空研究研究,先上班 那个程序的的意思是,local @stWndClass:WNDCLASS先是在栈中申请了一块地方,但这块地方乱七八糟的数字,所以要先清零,就好像去饭店吃饭,店小二给你找了张空桌,但桌上还有上桌客人留下吃剩盘子碟子没收拾,你要用桌子就得先得把桌子模干净一样!不过清零也可以自己清,用循环把0全填进去(你在VC++中看反汇编代码的时候,经常会看到这么做的),但用系统提供的填零函数更省事 bingghost 发表于 2011-11-17 08:37
:lol突然发现上面的 esi变笑脸了 - -
RtlMoveMemory 移动内存 ----> ?--->movsb
学习了,感谢楼主。
页:
[1]