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
Đoạn mã trên đại diện cho một phần của một dự án lớn mà tôi đang làm việc. Tôi đang cố gắng để đảo ngược mã này vào C tương đương nhưng tôi gặp khó khăn trong việc hiểu làm thế nào malloc hoạt động.Chính xác những gì _malloc làm trong lắp ráp?
Tôi tính 8 byte sẽ là kích thước của bộ nhớ được cấp phát; tuy nhiên, tôi không chắc chắn về dòng này.
mov eax, [esp+2ch]
malloc làm gì để phát?
Hơn nữa, đây có phải là mã C tương đương không?
int main(void)
{
int *ptr1;
ptr1 = (int *)malloc(sizeof(8));
*ptr1 = 4;
__start(*ptr1);
x84 _64 và x86 có các quy ước gọi khác nhau trên các hệ điều hành khác nhau, vì vậy câu trả lời này chỉ liên quan đến tiếp tuyến. Ví dụ, trong tình huống của OP, các đối số được truyền rõ ràng trên ngăn xếp, và không phải trong sổ đăng ký. –
Tại sao bạn lại nói về x86_64? –