诡异的指令导致gdb step后程序segmentation fault
可以看到pc寄存器里面的是scanner_alloc+10的位置, 但是从反汇编源码,有效的指令位置是scanner_alloc+9。
gcc版本: gcc (Debian 8.3.0-6) 8.3.0
gdb版本: GNU gdb (Debian 8.2.1-2+b3) 8.2.1

是在偶然用gdb调试时,走到此位置,触发segmentation fault,起初怀疑是gdb的bug,在断点时把指令位置搞错了。
后面发现用objdump + addr2line去查看汇编和源码的对应关系时,也有此问题。。。
使用gcc (GCC) 15.2.1 20250924编译出来的代码,发现0x64指令前面填充了3个字节0x66 0x66 0x66,该问题就解决了,程序没有再crash了,指令也对上了。


是gcc下cc1编译器的bug,0x64前面填充的0x66就是修复方案。

浙公网安备 33010602011771号