Я новичок в изучении эксплойтов и начинаю с самого начала, как работает память. Я слежу за текстом Smashing the Stack для удовольствия и получения прибыли. В первом примере они разбирают код и объясняют, что происходит. Я не могу понять, почему моя машина зарезервировала 30 байтов, когда достаточно 20 - как в примере.
Вот мой 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.