11: 0x404ee384 (vfprintf+0x1bae), in module libc.so.6@0x404b3000
10: 0x404f510e (_IO_fprintf+0x22), in module libc.so.6@0x404b3000
9: 0x405fd4dc <unknown>, in module libdhcps6.so@0x405f9000
8: 0x4060009a <unknown>, in module libdhcps6.so@0x405f9000
7: 0x40084024 (wrapper_dispatch+0xa1), in module libwrapper.so@0x40082000
6: 0x400842ad <unknown>, in module libwrapper.so@0x40082000
5: 0x4008a196 <unknown>, in module liblistener.so@0x40089000
4: 0x40089d15 (EnumerateListenerSet+0x7e), in module liblistener.so@0x40089000
3: 0x4008a2cb (ListenLoop+0xa1), in module liblistener.so@0x40089000
2: 0x080494c9 <unknown>, in module oss-daemon@0x08048000
1: 0x404c86e8 (__libc_start_main+0x160), in module libc.so.6@0x404b3000
0: 0x08049071 <unknown>, in module oss-daemon@0x08048000
由此看到 crash 的地方是
9: 0x405fd4dc <unknown>, in module libdhcps6.so@0x405f9000
基地址 0x405f9000
偏移地址 0x405fd4dc - 0x405f9000 = 44dc
然后用 命令
/opt/WG/x86-linux26-glibc24/bin/x86-objdump -S -l /work/osu/components/networking/build/kennewick/target/lib/libdhcps6.so
找到偏移地址的列表。 然后定位 crash的位置。
/work/osu/components/networking/src/lib/dhcps6/dhcps-wrap6.c:1617
fprintf( fp, ", %s", p_ip_temp->fixed_ip );
44c0: 89 7c 24 08 mov %edi,0x8(%esp)
44c4: 8b 95 0c fc ff ff mov -0x3f4(%ebp),%edx
44ca: 89 54 24 04 mov %edx,0x4(%esp)
44ce: 8b 8d 78 fc ff ff mov -0x388(%ebp),%ecx
44d4: 89 0c 24 mov %ecx,(%esp)
44d7: e8 78 d0 ff ff call 1554 <fprintf@plt>
/work/osu/components/networking/src/lib/dhcps6/dhcps-wrap6.c:1618
p_ip_temp_next = p_ip_temp->p_next;
44dc: 8b 77 10 mov 0x10(%edi),%esi
/work/osu/components/networking/src/lib/dhcps6/dhcps-wrap6.c:1619