0

我是研究漏洞利用的初学者,我从头开始研究内存的工作原理。我正在关注 Smashing the Stack for Fun and Profit 文本。在第一个示例中,他们反汇编代码并解释正在发生的事情。我无法理解的是为什么我的机器在 20 字节就足够的时候保留 30 字节 - 就像在这个例子中一样。

这是我的 C 代码:

void function(int a, int b, int c){
    char buffer1[5];
    char buffer2[10];
}

void main (){
    function(1, 2, 3);
}

下面是函数的反汇编:

(gdb) disass function 
Dump of assembler code for function function:
   0x000000000000066a <+0>: push   %rbp
   0x000000000000066b <+1>: mov    %rsp,%rbp
   0x000000000000066e <+4>: sub    $0x30,%rsp
   0x0000000000000672 <+8>: mov    %edi,-0x24(%rbp)
   0x0000000000000675 <+11>:    mov    %esi,-0x28(%rbp)
   0x0000000000000678 <+14>:    mov    %edx,-0x2c(%rbp)
   0x000000000000067b <+17>:    mov    %fs:0x28,%rax
   0x0000000000000684 <+26>:    mov    %rax,-0x8(%rbp)
   0x0000000000000688 <+30>:    xor    %eax,%eax
   0x000000000000068a <+32>:    nop
   0x000000000000068b <+33>:    mov    -0x8(%rbp),%rax
   0x000000000000068f <+37>:    xor    %fs:0x28,%rax
   0x0000000000000698 <+46>:    je     0x69f <function+53>
   0x000000000000069a <+48>:    callq  0x540 <__stack_chk_fail@plt>
   0x000000000000069f <+53>:    leaveq 
   0x00000000000006a0 <+54>:    retq   
End of assembler dump.

4

0 回答 0