2009-07-09 3 views
1

Celui de jeu que je fais les scripts pour utilise une dll primaire dans lequel nos scripts que nous écrivons (créative nommé « scripts.dll »fonction Écraser dans un autre dll sans modifications à dll primaire

Ce scripts.dll, côté serveur , charge d'autres plug-ins (DLLs), ainsi

question:.je dois passer outre une fonction existante dans scripts.dll, par exemple, pluginA.dll où celui scripts.dll ne pas Je me suis appelé

J'ai eu l'idée de saisir peut-être l'ajout ressaisir celui de scripts.dll et l'écraser avec (memcpy()?) l'adresse de ma nouvelle fonction.

Oh et les fonctions sont nommées de la même manière.

Répondre

1

D'abord je voudrais essayer d'ajuster l'appelant pour obtenir ce pointeur de fonction spécifique de pluginA.dll, et non de scripts.dll, à travers GetProcAddress.

Si ce n'est pas faisable, je écraserais le début de l'ancienne fonction avec une instruction de saut à la nouvelle fonction. L'instruction de saut sur x86 est "E9 XX XX XX XX"; remarquez que l'adresse cible est relative au PC après le saut. Si vous n'avez pas x86, le code de la machine sera différent, bien sûr.

2

Il s'agit d'un sujet assez vaste qui nécessite une réponse longue, mais, heureusement, il a été couvert ailleurs dans le détail. This CodeProject article est une lecture assez décente sur le sujet - il explique à la fois la théorie, et comment utiliser la bibliothèque pratique Microsoft Detours pour le faire très facilement.

+0

Merci, cela devrait m'aider. :) – Zack

Questions connexes