2013-05-31 3 views
1

Supposons que l'on croise la fonction d'une DLL donnée. Tous les processus qui utilisent cette fonction spécifique de cette DLL spécifique sont-ils affectés par l'accrochage?Les crochets de l'API affectent-ils tous les processus?

Par exemple, si l'on devait accrocher MessageBoxA de user32.dll de sorte qu'au lieu de sauter un MessageBox il jouait des Beatles Yellow Submarine comme son système. Est-ce que tous les processus appelant MessageBoxA rencontreraient ce comportement plutôt étrange?

-João Silva

+3

Heureusement, non. Difficile de garder un système d'exploitation en cours d'exécution si cela fonctionne. –

+0

@HansPassant, je sais que c'est une vieille question mais j'ai un souci. Je travaille sur un projet où nous sommes tenus de surveiller tous les appels système à une certaine fonction "recv" quel que soit le processus qui l'instancie. C'est possible ? –

Répondre

1

D'une manière générale, il serait spécifique.

Lorsque vous chargez une DLL, Windows charge la DLL dans votre espace mémoire. Si la DLL est déjà chargée dans la mémoire (et mappée dans l'espace d'un processus), les fenêtres vont juste cartographier la mémoire dans votre espace de processus.

Cependant lorsque vous appliquez le crochet, la mémoire est changée et donc Windows fera une copie de cette mémoire juste pour votre processus.

Lire sur les fichiers mappés en mémoire (la technologie pour cela est ce que Windows a utilisé pour charger le code)

+0

Euh ... eh bien ... pas nécessairement. Normalement, les segments de texte sont 'FILE_MAP_COPY', donc vous avez raison, mais cela ne doit pas être laissé comme ça. – Damon

+0

@Damon - vrai il peut toujours y avoir des exceptions. Je disais simplement l'approche commune. S'il vous plaît détailler plus dans la réponse Je voudrais lire à ce sujet. –

+0

@Preet J'ai posé cette question parce que je croyais savoir que le code de DLL est partagé entre les processus. Êtes-vous en train de dire que si un hook est appliqué à la fonction d'un user32.dll, le système va réellement copier la totalité de la DLL dans l'espace mémoire du processus afin que sa mémoire puisse être changée en toute sécurité? –

Questions connexes