Требовать понимания приращения сборки во время неопределенного поведения в программе на Си - PullRequest
0 голосов
/ 01 ноября 2019

Я столкнулся с неопределенным поведением в этом коде C ниже:

#include <stdio.h>

int main()
{
    int x=0,y=5;
    printf("x=%d,x_1=%d,sum=%d",x++,x,y+x);
    return 0;
}

Просто из любопытства я попытался проверить сборку того же самого, чтобы увидеть, могу ли я понять, как происходит загрузка и выполнение, но не могуЯ не очень понимаюДобровольцы, не могли бы вы помочь мне понять порядок, в котором фактически произошла реализация?

    .file   "example.c"
    .text
    .section    .rodata
.LC0:
    .string "x=%d,x_2=%d,y=%d\n"
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $16, %rsp
    movl    $0, -8(%rbp)
    movl    $5, -4(%rbp)
    movl    -4(%rbp), %edx
    movl    -8(%rbp), %eax
    leal    (%rdx,%rax), %ecx
    movl    -8(%rbp), %eax
    leal    1(%rax), %edx
    movl    %edx, -8(%rbp)
    movl    -8(%rbp), %edx
    movl    %eax, %esi
    leaq    .LC0(%rip), %rdi
    movl    $0, %eax
    call    printf@PLT
    nop
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"
    .section    .note.GNU-stack,"",@progbits
...