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
Il codice sopra rappresenta una parte di un grande progetto su cui sto lavorando. Sto cercando di invertire questo codice in equivalente C, ma ho difficoltà a capire come funziona malloc.Che cosa fa esattamente _malloc in assembly?
Sto calcolando 8 byte sarebbe la dimensione della memoria allocata; tuttavia, non sono sicuro di questa linea.
mov eax, [esp+2ch]
Che cosa fa malloc a eax?
Inoltre questo sarebbe equivalente al codice C?
int main(void)
{
int *ptr1;
ptr1 = (int *)malloc(sizeof(8));
*ptr1 = 4;
__start(*ptr1);
x84 _64 e x86 hanno diverse convenzioni di chiamata su vari SO, quindi questa risposta è solo correlata tangenzialmente. Ad esempio, nella situazione dell'OP, gli argomenti vengono chiaramente passati nello stack e non in un registro. –
Perché stai parlando di x86_64? –