Hay dos formas estándar que se me ocurren para hacer esto
gancho DLL tabla de importación.
Para esto necesita analizar el encabezado PE de la DLL, encontrar la tabla de importación y escribir la dirección de su propia función en lugar de lo que ya está escrito allí. Puede guardar la dirección de la función original para poder llamarla más tarde. Las referencias en los enlaces externos de este wikipedia article deben darle toda la información que necesita para poder hacer esto.
Modificación directa del código. Encuentre el código real de la función que desea enganchar y modifique los primeros códigos de operación para saltar a su propio código. necesita guardar el código de operación que estaba allí para que finalmente se ejecuten. Esto es más simple de lo que suena en su mayoría porque ya fue implementado por nada menos que los propios Microsoft en la forma de Detours library.
Esto es algo realmente bueno de hacer. con solo un par de líneas de código puede, por ejemplo, reemplazar todas las llamadas a GetSystemMetrics() desde say outlook.exe y ver las maravillas que ocurren.
Las ventajas de un método son las desventajas del otro. El primer método le permite agregar un gancho quirúrgico exactamente a la DLL que desea donde se desenganchan todas las otras DLL. El segundo método le permite el tipo de gancho más global para interceptar todas las llamadas que realiza la función.
¿Interceptar desde la aplicación que cargó el archivo DLL, o externamente? Externamente a un proceso específico, o a todos los procesos? ¡Podrías hacer un mejor trabajo al redactar tu pregunta! ;) – TheSoftwareJedi
¿A qué idioma y plataforma de Windows desean dirigirse? –