Есть ли способ вычислить байты, выделенные для кадра стека функции?

Мне дали этот код на C, и мне нужно вычислить байты, выделенные для кадра стека функции arith. Я везде искал способ сделать это, но у всех разные ответы.

      long arith(long x, long y, long z){
    long t1 = x + y;
    long t2 = z + t1;
    long t3 = x + 4;
    long t4 = y * 48;
    long t5 = t3 + t4;
    long rval = t2 * t5;
    return rval;
}
      
    arith:
    .LFB0:
        .cfi_startproc
        endbr64
        pushq    %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        movq    %rdi, -56(%rbp)
        movq    %rsi, -64(%rbp)
        movq    %rdx, -72(%rbp)
        movq    -56(%rbp), %rdx
        movq    -64(%rbp), %rax
        addq    %rdx, %rax
        movq    %rax, -48(%rbp)
        movq    -72(%rbp), %rdx
        movq    -48(%rbp), %rax
        addq    %rdx, %rax
        movq    %rax, -40(%rbp)
        movq    -56(%rbp), %rax
        addq    $4, %rax
        movq    %rax, -32(%rbp)
        movq    -64(%rbp), %rdx
        movq    %rdx, %rax
        addq    %rax, %rax
        addq    %rdx, %rax
        salq    $4, %rax
        movq    %rax, -24(%rbp)
        movq    -32(%rbp), %rdx
        movq    -24(%rbp), %rax
        addq    %rdx, %rax
        movq    %rax, -16(%rbp)
        movq    -40(%rbp), %rax
        imulq    -16(%rbp), %rax
        movq    %rax, -8(%rbp)
        movq    -8(%rbp), %rax
        popq    %rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc

Я пытался складывать байты каждый раз, когда мы вызываем тип данных длиной 6*8, что составляет 64 байта, но я не очень уверен в этом.

0 ответов

Другие вопросы по тегам