5

buf28

문제는 풀었지만 char buf의값는 28인데 buf 30 이들어가는 이유가 궁금합니다

답변 1개
4
   0x00000000004006e8 <+0>:     push   rbp
   0x00000000004006e9 <+1>:     mov    rbp,rsp
   0x00000000004006ec <+4>:     sub    rsp,0x30
   0x00000000004006f0 <+8>:     mov    eax,0x0
   0x00000000004006f5 <+13>:    call   0x400667 <init>
   0x00000000004006fa <+18>:    lea    rdi,[rip+0xbb]        # 0x4007bc
   0x0000000000400701 <+25>:    mov    eax,0x0
   0x0000000000400706 <+30>:    call   0x400540 <printf@plt>
   0x000000000040070b <+35>:    lea    rax,[rbp-0x30]
   0x000000000040070f <+39>:    mov    rsi,rax
   0x0000000000400712 <+42>:    lea    rdi,[rip+0xab]        # 0x4007c4
   0x0000000000400719 <+49>:    mov    eax,0x0
   0x000000000040071e <+54>:    call   0x400570 <__isoc99_scanf@plt>
   0x0000000000400723 <+59>:    mov    eax,0x0
   0x0000000000400728 <+64>:    leave
   0x0000000000400729 <+65>:    ret

저는 잘 모르겠지만 rsp는 16바이트로 정렬되야해서 16진수로 나타냈을 때 끝자리가 0으로 끝나야 할 겁니다.
그렇기 때문에 0x28 대신에 0x30을 할당하면 끝자리가 8보다는 0인게 더 좋죠. 그래서 sub rsp,0x30를 하게 된 것 같고 남은 8바이트는 버리는 것 같습니다.