鉴于该功能:
void vuln( char * arg ) {
char buf[256];
strcpy(buf, arg);
}
拆解于:
0x0804842b 55 push ebp
0x0804842c 89e5 mov ebp, esp
0x0804842e 81ec08010000 sub esp, 0x108
0x08048434 83ec08 sub esp, 8
0x08048437 ff7508 push dword [arg_8h]
0x0804843a 8d85f8feffff lea eax, ebp - 0x108
0x08048440 50 push eax
0x08048441 e8bafeffff call sym.imp.strcpy
0x08048446 83c410 add esp, 0x10
0x08048449 c9 leave
0x0804844a c3 ret
当参数为 264 = 0x108 个字符并且我期望 256 个字节时,它会溢出。为什么编译器增加了 8 个字节sub esp,8
?