+ sub esp, 12
+
+ ; realloc to make memory bigger first
+ mov eax, DWORD [ebp+_BUFFER_LEN]
+ add eax, 1
+ mov ecx, 4
+ mul ecx
+ push eax
+ push DWORD [ebp+_BUFFER]
+ call realloc
+ mov [ebp-NEW_BUFFER], eax
+
+ ; set vars
+ mov eax, DWORD [ebp+_BUFFER_LEN]
+ sub eax, [ebp+_SHIFT_POS]
+ mov [ebp-SHIFT_LEN], eax
+
+ str_offset [ebp-NEW_BUFFER], [ebp+_SHIFT_POS]
+ mov [ebp-BLOCK_OFFSET], eax
+
+ ; move the memory
+ mov eax, DWORD [ebp-SHIFT_LEN]
+ mov ecx, 4
+ mul ecx
+ push eax
+ push DWORD [ebp-BLOCK_OFFSET]
+ mov eax, DWORD [ebp-BLOCK_OFFSET]
+ add eax, 4
+ push eax
+ call memmove
+
+ %undef _BUFFER
+ %undef _BUFFER_LEN
+ %undef _SHIFT_POS
+
+ mov eax, [ebp-NEW_BUFFER]