我製作了test_program
,它使用動態庫並作爲linux守護進程工作。當使用動態庫(dlopen)時,是否可以通過更改庫文件導致分段錯誤?
test_program
包含一個代碼初始化過程。
dlopen(libtest.so);
通常情況下,終止與test_program
SIGKILL不會導致段錯誤(我仔細檢查了!!)
但與覆蓋libtest.so
文件(如cp libtest.so /lib64/libtest.so
)事業分割終止故障。
庫文件意外覆蓋和文件實際上是相同的libtest.so
(我是diffed)。
我會非常感激知道爲什麼分段錯誤發生時庫文件覆蓋。
感謝您閱讀並附上生成的corefile和dmesg的Backtrace,如果您需要更多信息,請告訴我。
回溯(分開):
#0 0x00007fd2c7668118 in ??() from /lib64/libgcc_s.so.1
#1 0x00007fd2c7669019 in _Unwind_Backtrace() from /lib64/libgcc_s.so.1
#2 0x00007fd2c73a2186 in backtrace() from /lib64/libc.so.6
#3 0x000000000050fda8 in print_trace (sig=11, siginfo=0x7fff87da5770, context=<optimized out>) at sighandler.c:239
#4 <signal handler called>
#5 0x0000000000018219 in ??()
#6 0x00007fd2c9c47a1a in _dl_fini() from /lib64/ld-linux-x86-64.so.2
#7 0x00007fd2c72d0e69 in __run_exit_handlers() from /lib64/libc.so.6
#8 0x00007fd2c72d0eb5 in exit() from /lib64/libc.so.6
#9 0x000000000050d655 in end_signal (signo=<optimized out>) at
#10 <signal handler called>test_program.c:103
的dmesg:
test_program[11817]: segfault at 18219 ip 00007fd2c7668118 sp 00007fff87da4f40 error 4 in libgcc_s-4.8.5-20150702.so.1[7fd2c7659000+15000]
'男人dlclose'「從這些功能*錯誤,可以使用診斷dlerror獲得(3)*」 - 具體到你的問題,當'dlcose'叫什麼發生(也許是隱含的)並且文件不再存在? –
@ DavidC.Rankin我試圖把dlerror放到dlclose調用的時候,但是文件的位置沒有改變。 –