读书人

RtlFillMemory,RtlMoveMemory求解解决

发布时间: 2012-04-04 16:38:51 作者: rapoo

RtlFillMemory,RtlMoveMemory求解
RtlMoveMemory是怎样保证当dst与source有重叠时,仍然可以复制或移动?
RtlFillMemory的作用是什么?

[解决办法]
如果source<dst从高地址往低地址复制
如果source>dst从低地址往高地址复制
RtlFillMemory就是memset
[解决办法]

Assembly code
        mov     esi,EmmSource        mov     edi,EmmDestination        mov     ecx,EmmLength        cld                               //注意这        cmp     esi,edi                 ; Special case if Source > Destination        jbe     overlapnooverlap:        mov     edx,ecx        and     edx,MEMORY_ALIGNMENT_MASK        shr     ecx,MEMORY_ALIGNMENT_LOG2        rep     movsdoverlap:        je      movedone        mov     eax,edi        sub     eax,esi        cmp     ecx,eax        jbe     nooverlap        std                         //注意这        add     esi,ecx        add     edi,ecx        dec     esi        dec     edi        rep     movsb        cld        jmp     short movedonemovedone:        pop     edi        pop     esi 

读书人网 >C语言

热点推荐