Program terminated with signal 11, Segmentation fault.
(gdb) info registers
rax 0x0 0
rip 0x496272 0x496272 <my_function+464>
eflags 0x10202 [ IF RF ]
有问题的代码看起来像这样。
if ( ... a->b->c.d & 0x100 ... )
反汇编是
0x0000000000496262 <+448>: mov rax,QWORD PTR [rbp-0x30]
0x0000000000496266 <+452>: mov rax,QWORD PTR [rax+0x10]
0x000000000049626a <+456>: mov eax,DWORD PTR [rax+0x48]
0x000000000049626d <+459>: and eax,0x100
=> 0x0000000000496272 <+464>: test eax,eax
0x0000000000496274 <+466>: je 0x49628b <my_function+489>
...
0x0000000000496286 <+484>: jmp 0x49636f <my_function+717>
0x000000000049628b <+489>: mov rax,QWORD PTR [rbp-0x30]
0x000000000049628f <+493>: mov rax,QWORD PTR [rax+0x10]
似乎没有任何内存访问问题,因为GDB可以打印访问的字段,并且代码在mov
操作上没有错误。
(gdb) p a->b->c.d
$1 = 0
没有其他线程同时运行。
我的猜测目前是问题出在其他地方,而GDB或核心文件的信息不完整或不正确。