當我運行可執行文件後,我用新版本覆蓋了它的.so庫文件,這導致可執行文件因分段錯誤而死亡。我以爲只有在加載ELF文件時才能訪問庫文件。我錯了嗎?覆蓋庫文件導致分段錯誤
1
A
回答
9
庫文件在加載時映射到內存中(通常是在加載可執行文件時 - 但庫文件也可以稍後加載到dlopen()
)。然後根據需要加載需要的文件的實際頁面。
覆蓋該文件將導致映射文件MAP_SHARED
(大部分文件)中的頁面被更新爲新內容。這是導致分段錯誤的原因。不要這樣做 - 相反,刪除現有的.so文件,然後在其位置編寫新文件。
2
與caf一樣,在運行時覆蓋可執行文件並不是一個好主意。
取而代之,將新文件作爲臨時文件寫入同一目錄,然後使用rename()以原子方式重命名它。這是安裝人員通常所做的。
相關問題
- 1. gobject-introspection覆蓋導致導入錯誤
- 2. 覆蓋history.pushState導致歌劇11錯誤
- 3. 覆蓋沒有「覆蓋」/「新」不會導致錯誤
- 4. pthread_join()導致分段錯誤
- 5. vkCreateInstance導致分段錯誤
- 6. strncpy導致分段錯誤
- 7. typeinfo導致分段錯誤
- 8. NSNotification導致分段錯誤
- 9. fclose導致分段錯誤?
- 10. PyArg_ParseTuple導致分段錯誤
- 11. strcpy()導致分段錯誤?
- 12. pthread_create導致分段錯誤
- 13. g_file_new_for_path()導致分段錯誤
- 14. 內聯彙編和函數覆蓋導致段錯誤
- 15. 覆蓋致命錯誤(EclEmma)
- 16. 覆蓋winforms OnLoad導致錯誤創建處理程序錯誤
- 17. 覆蓋zuul錯誤過濾器導致轉發錯誤
- 18. 讀一個6.9GB文件會導致分段錯誤
- 19. 「this」關鍵字導致分段錯誤
- 20. 導致分段錯誤的WSDL模式
- 21. OpenGL glutInit():XOpenDisplay()導致分段錯誤
- 22. 返回到libc導致分段錯誤
- 23. 倒帶導致分段錯誤
- 24. Pthread_create導致分段錯誤(C++,Kubutnu 15)
- 25. malloc問題導致分段錯誤
- 26. 系統調用導致分段錯誤
- 27. Qt App在GLWidget.show();導致分段錯誤;
- 28. 爲什麼printf導致分段錯誤?
- 29. malloc導致mprotect出現分段錯誤
- 30. OpenSSL d2i_RSA_PUBKEY導致分段錯誤