簡體   English   中英

當用戶處理被殺死時,硬盤驅動器上的共享庫(.so)文件會發生更改

[英]Shared Library (.so) file on hard drive changes when user processed killed

這是我之前的問題的延續。

libgmp.so的哈希值會自動更改

我開發了一個庫並將其鏈接到我的進程。 每次我將它與我的進程鏈接時,我的庫應該具有相同的哈希值(從安裝時間開始)。 在進行任何其他操作之前,我的進程始終檢查庫的哈希值。 我的進程是一個守護進程,它在initrd中使用腳本啟動和停止。 我總是通過“kill -9 myproc”命令殺死我的進程,該命令發送SIGKILL進行處理並強制終止進程。

但是當我停止並重新啟動我的進程時,有時我的共享庫文件的哈希值會發生變化。 它發生在隨機時間,最近它發生得更頻繁,由於我在其中編碼的哈希比較條件,我的進程無法啟動。

我已經轉儲了兩個共享庫,即安裝后和更改后的版本。 我用“objdump -d libmy.so”來轉儲。 這是兩個轉儲的“差異”屏幕截圖(黃色是原始文件,紅色是更改版本):

在此輸入圖像描述

我不太了解elf文件內容,但看起來原始文件只有偏移量,更改文件有完整的指令和功能地址。 因此,庫的更改版本比原始版本大2kb。

為什么會這樣? 是否與強制進程關閉的SIGKILL信號有關? 如果沒有,可能是什么原因?

任何幫助,將不勝感激。

為什么會這樣?

很可能是因為您使用的是RedHat,Fedora或CentOS系統,並且啟用了預鏈接(默認情況下,它會將系統上的所有共享庫預先鏈接到每兩周一個新的隨機地址)。 當您停止/重新啟動守護程序時,它會從您上次啟動守護程序后獲取新版本的庫IF prelink。

請參閱有關如何禁用預鏈接的這些說明

或者,修改校驗和過程以僅關注有趣的部分,例如.text.data.rodata ,並忽略其余部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM