13 ; shrinks array (4byte) by shifting blocks left
14 ; args: buffer, buffer_len, shift_pos (index that gets destroyed)
16 ; eax: location of new buffer
20 %define _BUFFER_LEN 12
23 %define BLOCK_OFFSET 8 ; mem location of block to be destroyed
32 mov eax, DWORD [ebp+_BUFFER_LEN]
33 sub eax, [ebp+_SHIFT_POS]
35 mov [ebp-SHIFT_LEN], eax
37 str_offset [ebp+_BUFFER], [ebp+_SHIFT_POS]
38 mov [ebp-BLOCK_OFFSET], eax
40 ; free string to be destoryed first
41 mov eax, DWORD [ebp-BLOCK_OFFSET]
47 mov eax, DWORD [ebp-SHIFT_LEN]
51 mov eax, DWORD [ebp-BLOCK_OFFSET]
54 push DWORD [ebp-BLOCK_OFFSET]
57 ; realloc to shrink the array
67 ; grows array by shifting blocks right
68 ; args: buffer, buffer_len, shift_pos (new uninitalized index)
69 ; return: location of new buffer