神秘的Segfault

时间:2016-05-02 19:08:38

标签: assembly segmentation-fault

我在尝试调用varargs函数时遇到了一个我无法弄清楚的分段错误。在调试器(Nemiver / GDB和EDB)中,错误指令是movaps xmmword ptr [rbp-288], xmm7rbp == 0x00007ffd0e16ba78,它位于堆栈中。 xmm70,如果重要的话。

指令位于.text:00401d10函数中的buffer_appendf

Online Disassembler

Binary Download

1 个答案:

答案 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之前应该修复对齐。