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

例如一些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)存中還是之前只有一份嗎?

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

沒(méi)有修改前所有進(jìn)程共用一份系統(tǒng)dll,修改時(shí)系統(tǒng)存在寫(xiě)時(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í)寫(xiě)到的是新的物理內(nèi)存頁(yè)面上,不影響其它程序。

回復(fù)
  參與學(xué)習(xí)     人
  提問(wèn)次數(shù)     100 個(gè)
我的問(wèn)答 領(lǐng)取收益
0
我的提問(wèn)
0
我的回答
0
學(xué)習(xí)收益