背景
背景是在重构完 Signal 之后,一开始用我们自己的 libc 测试 signal 功能没有问题,但是在用 relibc 测试的时候出问题了,出错的原因就是一个 Userland 的 General Protection(GP),这个东西是一个硬件异常,通常是由于汇编指令出错或者内存访问出错导致,比如把一个未对齐的内存地址作为某个指令的操作数,而这个指令要求这个内存地址是 8/16 对齐的。
初步分析
在查看 GP 的 RIP ,反汇编了用户空间的测试程序之后,看到了对应的汇编代码是
movapd %XMM0 0xe0(rsp)
大约 7 分钟