例如一些hook會修改kernel32.dll或者其他系統(tǒng)dll的代碼段,,那如果修改了這些dll數(shù)據(jù)段不是違背了dll所有進程共用一份這句話了嗎?測試發(fā)現(xiàn)我修改了一個進程中的kernel32.dll的代碼段,,其他進程不會有影響,那問題是這樣這時這個被修改的dll在物理內(nèi)存中還是之前只有一份嗎,?
沒有修改前所有進程共用一份系統(tǒng)dll,,修改時系統(tǒng)存在寫時復(fù)制機制Copy on write,應(yīng)用程序修改映射的dll內(nèi)存時,,系統(tǒng)會重新分配一份內(nèi)存頁面,,把dll內(nèi)存頁面的內(nèi)容復(fù)制一份到新的頁面上,應(yīng)用程序?qū)懭霑r寫到的是新的物理內(nèi)存頁面上,,不影響其它程序,。