В настоящее время я делаю событие Capture-the-Flag от Stripe (вы должны проверить его, если еще не видели).Событие требует, чтобы вы много смотрели на дизассемблированные исполняемые файлы, и мои знания об asm ржавые.
Я продолжаю видеть, что константа 0x18
отображается как своего рода минимальный размер стека.Например, в функции, которая выделяет массив char [1024] и вызывает функцию strcpy (), сборка выглядит следующим образом:
8048484: 55 push %ebp
8048485: 89 e5 mov %esp,%ebp
8048487: 81 ec 18 04 00 00 sub $0x418,%esp
804848d: 8b 45 08 mov 0x8(%ebp),%eax
8048490: 89 44 24 04 mov %eax,0x4(%esp)
8048494: 8d 85 f8 fb ff ff lea -0x408(%ebp),%eax
804849a: 89 04 24 mov %eax,(%esp)
804849d: e8 e6 fe ff ff call 8048388 <strcpy@plt>
80484a2: c9 leave
80484a3: c3 ret
Почему требуется дополнительное пространство?