我在尝试调用varargs函数时遇到了一个我无法弄清楚的分段错误。在调试器(Nemiver / GDB和EDB)中,错误指令是movaps xmmword ptr [rbp-288], xmm7
和rbp == 0x00007ffd0e16ba78
,它位于堆栈中。 xmm7
是0
,如果重要的话。
指令位于.text:00401d10
函数中的buffer_appendf
。
答案 0 :(得分:1)
movaps
需要操作数的16字节对齐,并且大多数调用约定都能确保这一点。根本原因是你实际上早先搞砸了对齐,看起来是parallisp_main
:
0x0000000000400a95 <+159>: pop %rbx
0x0000000000400a96 <+160>: callq *%rax
0x0000000000400a98 <+162>: callq 0x4007e0 <free@plt>
0x0000000000400a9d <+167>: retq
将pop %rbx
移到retq
之前应该修复对齐。