在函数的开头有这样的结构:
0x7ffff7e47a10: test $0xf,%spl
0x7ffff7e47a14: je 0x7ffff7e47a1b
0x7ffff7e47a1a: int3
如果标志不中断,0xf
spl
的目的是什么? 是不是像"堆栈一切都好"?
这将检查堆栈是否与 16 个字节对齐,如果不是,则中止程序。 如果堆栈对齐到 16 个字节,至少 4 位%rsp
和扩展%spl
是清晰的。这就是test $0xf,%spl
测试的目的。