0,0 → 1,95 |
//mem.Init |
dword mem_Init() |
{ |
$push ebx |
$mov eax, 68 |
$mov ebx, 11 |
$int 0x40 |
|
$pop ebx |
return EAX; |
} |
|
//mem.Alloc |
dword mem_Alloc(dword size) |
{ |
$push ebx |
$push ecx |
$mov eax, 68 |
$mov ebx, 12 |
$mov ecx, size |
$int 0x40 |
|
$pop ecx |
$pop ebx |
return EAX; |
} |
|
//mem.ReAlloc |
stdcall dword mem_ReAlloc(dword mptr, size) |
{ |
//$push ebx ecx edx |
$push ebx |
$push ecx |
$push edx |
$mov eax, 68 |
$mov ebx, 20 |
$mov ecx, size |
$mov edx, mptr |
$int 0x40 |
|
$pop edx |
$pop ecx |
$pop ebx |
//$pop edx ecx ebx |
return EAX; |
} |
|
//mem.Free |
void mem_Free(dword mptr) |
{ |
$push eax |
$push ebx |
$push ecx |
$mov eax, 68 |
$mov ebx, 13 |
$mov ecx, mptr |
$test ecx, ecx |
$jz end0 |
$int 0x40 |
@end0: |
$pop ecx |
$pop ebx |
$pop eax |
} |
|
//stdcall dword ?? |
inline fastcall mem_Move( EDI, ESI, ECX) |
{ |
asm { |
mov eax, ecx |
cmp edi, esi |
jg l1 |
je l2 |
sar ecx, 2 |
js l2 |
rep movsd |
mov ecx, eax |
and ecx, 3 |
rep movsb |
jmp short l2 |
l1: lea esi, dsdword[ esi+ecx-4] |
lea edi, dsdword[ edi+ecx-4] |
sar ecx, 2 |
js l2 |
std |
rep movsd |
mov ecx, eax |
and ecx, 3 |
add esi, 3 |
add edi, 3 |
rep movsb |
cld |
l2: |
} |
} |