首頁
社區(qū)
課程
招聘
為什么可以修改一個運行的進程系統(tǒng)dll的代碼段?
0312 2022-1-3 1003

例如一些hook會修改kernel32.dll或者其他系統(tǒng)dll的代碼段,那如果修改了這些dll數(shù)據(jù)段不是違背了dll所有進程共用一份這句話了嗎?測試發(fā)現(xiàn)我修改了一個進程中的kernel32.dll的代碼段,其他進程不會有影響,那問題是這樣這時這個被修改的dll在物理內存中還是之前只有一份嗎?

收藏
1條回答
0346954 2022-1-8

沒有修改前所有進程共用一份系統(tǒng)dll,修改時系統(tǒng)存在寫時復制機制Copy on write,應用程序修改映射的dll內存時,系統(tǒng)會重新分配一份內存頁面,把dll內存頁面的內容復制一份到新的頁面上,應用程序寫入時寫到的是新的物理內存頁面上,不影響其它程序。

回復