16) ntdll!RtlFillMemoryUlong() RtlpInsertFreeBlock()调用过RtlFillMemoryUlong()。注意该函数与memset()的区 别。 用IDA Pro逆向英文版XP SP1的ntdll!RtlFillMemoryUlong: -------------------------------------------------------------------------- ; __stdcall RtlFillMemoryUlong(x,x,x) public _RtlFillMemoryUlong@12 _RtlFillMemoryUlong@12 proc near dest= dword ptr 8 bytecount= dword ptr 0Ch value= dword ptr 10h push edi mov edi, [esp+dest] mov ecx, [esp+bytecount] mov eax, [esp+value] shr ecx, 2 ; bytecount / 4 rep stosd pop edi retn 0Ch _RtlFillMemoryUlong@12 endp -------------------------------------------------------------------------- 下面是C风格的伪代码: -------------------------------------------------------------------------- VOID NTAPI RtlFillMemoryUlong ( PULONG dest, // 第01形参,[EBP+0x008] DWORD bytecount, // 第02形参,[EBP+0x00C],以字节为单位 ULONG value // 第03形参,[EBP+0x010] ) { /* * 假设ULONG占4字节 */ bytecount /= 4; while ( bytecount-- ) { *dest++ = value; } /* end of while */ return; } /* end of RtlFillMemoryUlong */ --------------------------------------------------------------------------