x64 上栈指针(rsp)不对齐引起的 segmentation fault, 以及 c 语言可变参数的一个细节
在 Windows + VS2022 上做了同样的测试,结果正常没有报异常,原因是 VC 编译器的 printf 函数实现不同,没有一上来就将 xmm 寄存器入栈。由上图可以看到是在调用 printf 函数时报错的,而操作 xmm0 xmm1 这些寄存器需要 rsp/rbp 16字节对齐,查看一下寄存器的值,果然是没有对齐。但是调用其它函数却没有,分析 printf 的汇编发现有一条 test al, al 指令判断 al 是否为 0,是刚跳转,不是则 xmm0 ~ xmm7 入栈。
原创
2024-05-03 16:48:29 ·
401 阅读 ·
0 评论