RtlFillMemory,RtlMoveMemory求解
RtlMoveMemory是怎样保证当dst与source有重叠时,仍然可以复制或移动?
RtlFillMemory的作用是什么?
[解决办法]
如果source<dst从高地址往低地址复制
如果source>dst从低地址往高地址复制
RtlFillMemory就是memset
[解决办法]
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