I have the following lines discovered in a piece of code (using IDA PRO) :
...
...
push 44h
pop edi
push edi ; size_t
xor esi, esi
lea eax, [ebp+StartupInfo]
push esi ; int
push eax ; void *
call _memset
...
...
When I saw the line lea eax, [ebp+StartupInfo] I thought, okay eax is a pointer to the structure STARTUPINFO. With int esi = 0 or NULL (see the line xor esi, esi) and with size_t edi = 44h and by calling memset, they must fill the first 44 bytes of STARTUPINFO (that would be the elements cb, lpReserved,....,wShowWindow).
But the line push eax ; void *
irritates me. How can eax has the type Startupinfo and void at the same time?
After that, I found out that the first parameter of memset()-function must have the type void. And so, the question mark in my mind is now bigger...