public main
main proc near
push ebp
mov ebp, esp
and esp, 0FFFFFFF0h
sub esp, 30h
mov dword ptr [esp], 8 ; size
call _malloc
mov [esp+2Ch], eax
mov dword ptr [esp+4], 4
mov eax, [esp+2Ch]
mov [esp], eax
call __start
The code above represents a portion of a large project I am working on. I am trying to reverse this code into C equivalent but I am having difficulty understanding how malloc works.
I am figuring 8 bytes would be the size of the memory being allocated; however, I am not sure about this line.
mov eax, [esp+2ch]
What does malloc do to eax?
Furthermore would this be equivalent C code?
int main(void)
{
int *ptr1;
ptr1 = (int *)malloc(sizeof(8));
*ptr1 = 4;
__start(*ptr1);
The function malloc() will allocate a block of memory that is
size
bytes large. If the requested memory can be allocated a pointer is returned to the beginning of the memory block.Note: the content of the received block of memory is not initialized.
Syntax of malloc():
void *malloc ( size_t size );
Parameters:
Size of the memory block in bytes.
Return value:
If the request is successful then a pointer to the memory block is returned. If the function failed to allocate the requested block of memory, a NULL is returned, NULL may also be returned by a successful call to
malloc()
with a size of zero.As stated in this CS 301 lecture by Dr. Lawlor:
for malloc in assembly language..see this link malloc