2012-07-23 88 views
1

我想在Linux上修改此共享庫(帶.so)擴展名。我插入一些printf語句和fprintf語句來調試,並且它沒有效果。我刪除了.so文件,並意識到該程序仍能正常運行。這是否意味着程序被加載到內存中? (但我確定只有我測試的程序使用.so文件,雖然)從內存卸載共享庫

我如何獲得它卸載,所以我可以確保我的程序加載修改的?

+0

你沒有提供足夠的細節,所以我們必須猜測你真的在做什麼。 – 2012-07-23 06:07:37

回答

5

不,共享庫不會緩存在內存中。如果你刪除了.so文件和程序仍然運行,則:

  • 程序加載相同名稱的.so從不同的位置,或
  • 程序可以在不加載.so
  • 運行

如果.so應該在程序啓動時加載,那麼你可以使用ldd,找出你的操作系統認爲.so實際上是。

如果在運行時動態加載.so,那麼可能strace將能夠幫助查明發生了什麼。

+0

通過啓動你是指程序啓動還是操作系統啓動? – huggie 2012-07-23 04:01:25

+1

程序啓動。 ELF可執行文件包含一個共享庫列表,當進程啓動時,OS將爲該進程加載共享庫。該過程可能選擇稍後使用'dlopen()'打開更多的共享庫。 – 2012-07-23 04:02:50

+0

這是一個使用共享庫的Python程序,使事情變得更加複雜。 – huggie 2012-07-23 04:31:00

2

您可以閱讀/proc/1234/maps來找出進程1234的內存映射。這也顯示了動態加載的共享對象。

您可以使用LD_LIBRARY_PATH環境變量來更改共享庫的路徑,並使用ldconfig來升級其緩存。另請參閱/etc/ld.so.conf等。

當然,您必須重新啓動加載共享庫的程序。