意外的 SEGFAULT 当显然没有什么会导致它时

逆向工程 部件 linux
2021-06-29 23:31:50

这是我正在处理的一个 CTF 问题。希望在这里问这个问题是合适的。

发生分段错误时的 GDB 输出

以上是段错误关闭时的 GDB 输出。movaps是违规指令,这意味着它rsp+0x40很可能指向未映射的内存。

然而,仔细看看为堆栈分配的内存

堆栈内存映射

rsp=0x00007ffde19d78a8从所述GDB输出,显示,rsp+0x40是很好的分配范围内。这对我来说真的很困惑,我在这里遗漏了什么吗?我还可以研究其他什么来调试这个?

最后运行它时的输出 strace

[pid 32671] --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=NULL} ---
[pid 32671] +++ killed by SIGSEGV (core dumped) +++

表明它显然是一个空指针取消引用 ( si_addr=NULL),这对我来说没有任何意义,因为违规指令movaps XMMWORD PTR [rsp+0x40],xmm0没有访问 NULL 指针?

1个回答

根据这个地址应该由16,这是不会发生对齐。您的rsp值以 结尾0xa8,因此[rsp + 0x40]将对齐 8,而不是 16。