【发布时间】:2016-05-02 19:08:37
【问题描述】:
我在尝试调用可变参数函数时遇到了一个分段错误,我无法弄清楚。在调试器(Nemiver/GDB 和EDB)中,错误指令是堆栈上的movaps xmmword ptr [rbp-288], xmm7 和rbp == 0x00007ffd0e16ba78。 xmm7 是 0,如果重要的话。
指令位于.text:00401d10,在buffer_appendf 函数中。
【问题讨论】:
-
这可能意味着你搞砸了堆栈对齐。
movaps要求操作数对齐 16 字节,并且大多数调用约定都确保了这一点。 -
因为 x86 堆栈会向下增长,假设我 可以 保证堆栈具有 8 位对齐,我是否可以只
and rsp 0xff...f0来确保 16 字节对齐?跨度> -
是的,但根本原因是您实际上在早些时候搞砸了对齐方式。当然,您可以在故障处修复对齐,但这是错误的解决方案。看起来罪魁祸首是
parallisp_main。
标签: assembly segmentation-fault