Comportamento dell'epilogo delle funzioni da GCC 4.9.0

2

Userò il seguente codice C per spiegare la mia domanda:

#include <stdio.h>

int main(void) {
  printf("foo\n");
  return 0;
}

Prima di GCC 4.9.0, lo smontaggio produce:

.LC0:
        .string "foo"
main:
        push    ebp
        mov     ebp, esp
        and     esp, -16
        sub     esp, 16
        mov     DWORD PTR [esp], OFFSET FLAT:.LC0
        call    puts
        mov     eax, 0
        leave
        ret

Tuttavia, dal momento che GHC 4.9.0, il risultato è come:

.LC0:
        .string "foo"
main:
        lea     ecx, [esp+4]
        and     esp, -16
        push    DWORD PTR [ecx-4]
        push    ebp
        mov     ebp, esp
        push    ecx
        sub     esp, 4
        sub     esp, 12
        push    OFFSET FLAT:.LC0
        call    puts
        add     esp, 16
        mov     eax, 0
        mov     ecx, DWORD PTR [ebp-4]
        leave
        lea     esp, [ecx-4]
        ret

Qualcuno sa perché questa modifica è stata presa?

    
posta Marronnier 10.03.2018 - 06:43
fonte

0 risposte

Leggi altre domande sui tag