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