2013-05-31 68 views
1

說一個掛鉤給定的DLL函數。 是否所有使用該鉤子特定DLL的特定函數的進程都受該鉤子影響?API鉤子是否會影響所有進程?

例如,如果一個是從user32.dll掛鉤MessageBoxA,這樣,而不是彈出一個消息,將起到披頭士黃色潛水艇作爲一個系統的聲音。所有調用MessageBoxA的進程都會遇到這種相當奇怪的行爲嗎?

-JoãoSilva

+3

謝天謝地,沒有。很難保證操作系統能夠正常運行。 –

+0

@HansPassant,我知道這是一個老問題,但我有一個問題。我正在開發一個項目,我們需要監視所有對某個函數「recv」的系統調用,而不管實例化它的過程如何。可能嗎 ? –

回答

1

一般來說,它會處理特定的。

當你加載DLL窗口加載DLL到你的內存空間。如果dll已經加載到內存中(並映射到某個進程的空間),那麼Windows將只將內存映射到進程空間。

但是,當您應用掛鉤時,內存會發生變化,因此windows會爲您的進程創建所述內存的副本。

讀取內存映射文件(此技術是用於加載代碼的窗口)

+0

呃...不一定。通常情況下,文本段是'FILE_MAP_COPY',所以你是對的,但是這並不需要這樣。 – Damon

+0

@Damon - 真的,總會有例外。我只是說明了常見的做法。請詳細瞭解我想閱讀的更多答案。 –

+0

@Preet我問了這個問題,因爲我認爲我知道DLL的代碼在進程間共享。你是說如果一個鉤子被應用到user32.dll的函數中,系統實際上會將整個DLL複製到進程內存空間中,以便可以安全地更改其內存? –

相關問題