我已经使用ida将x86应用程序反汇编,它会生成以下代码

.text:1084FF10                 push    ebp
.text:1084FF11                 mov     ebp, esp
.text:1084FF13                 and     esp, 0FFFFFFF8h
.text:1084FF16                 sub     esp, 0D4h
.text:1084FF1C                 mov     eax, ___security_cookie
.text:1084FF21                 xor     eax, esp


指令“和esp,0FFFFFFF8h”在这里做什么?

#1 楼

这会将堆栈指针对齐到8个字节的边界。这是由编译器完成的,以提高性能,因为从未对齐的地址读取会导致性能下降。