Сразу предупрежу, что на С/С++ не программировал уже много лет. А для Linux на C/C++ не программировал никогда. И очень нужна помощь в отладке одной библиотечки, а пофиксать я и сам смогу. К сожалению ее разработчики еще не шевелятся, а релиз наступает на пятки.
Исходные данные.
Linux: Ubuntu Linux hhost 3.2.0-43-generic #68-Ubuntu SMP Wed May 15 03:33:33 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
LIBC: 2.15
libNRJavaSerial.so: библиотечка, вот с ней у нас и проблемы. К счастью есть исходники.
Работает приложение с USB портами. Спустя час-два вылетает. Бактрейс следующий:
Очевидно что валится в методе initialise_event_info_struct из-за какого-то кривого указателя. Но какая при этом выполняется сишная операция мне понятно. gdb показал код ассемблерный:
(gdb) x/20i initialise_event_info_struct+0x1ca-10
0x5fc0 <initialise_event_info_struct+448>: stos %rax,%es:(%rdi)
0x5fc2 <initialise_event_info_struct+450>: movslq (%rbx),%rdi
0x5fc5 <initialise_event_info_struct+453>: callq 0x37b0 <__fdelt_chk@plt> 0x5fca <initialise_event_info_struct+458>: mov (%rbx),%ecx
0x5fcc <initialise_event_info_struct+460>: mov $0x1,%edx
0x5fd1 <initialise_event_info_struct+465>: movq $0x0,0x158(%rbx)
0x5fdc <initialise_event_info_struct+476>: movq $0x3e8,0x160(%rbx)
0x5fe7 <initialise_event_info_struct+487>: movl $0x1,0x30(%rbx)
0x5fee <initialise_event_info_struct+494>: shl %cl,%rdx
0x5ff1 <initialise_event_info_struct+497>: or %rdx,0xd8(%rbx,%rax,8)
0x5ff9 <initialise_event_info_struct+505>: mov $0x1,%eax
0x5ffe <initialise_event_info_struct+510>: add $0x8,%rsp
0x6002 <initialise_event_info_struct+514>: pop %rbx
0x6003 <initialise_event_info_struct+515>: pop %rbp
0x6004 <initialise_event_info_struct+516>: retq
0x6005 <initialise_event_info_struct+517>: nopl (%rax)
0x6008 <initialise_event_info_struct+520>: test %rdx,%rdx
0x600b <initialise_event_info_struct+523>: movb $0x0,(%rdi)
0x600e <initialise_event_info_struct+526>: jne 0x5eab <initialise_event_info_struct+171>
0x6014 <initialise_event_info_struct+532>: jmpq 0x5e87 <initialise_event_info_struct+135>
Жирным я выделил адрес который соответствует initialise_event_info_struct+0x1ca если я ничего не перепутал.
У меня есть исходник, у меня есть эта библиотечка и я собрал ее с максимальной отладочной инфой. Но gdb не показывает сишный код. У меня есть Eclipse и KDevelop. Помогите пожалуйста установить точный оператор на котором валится приложение. Может быть есть способ отладки чтобы сопоставить код и этот адрес?
P.S. Вы не ошиблись все это крутится через жаву, но чтобы не уводить тему в оффтоп я об этом тактично умолчал.