Llamando a una función no exportada en una DLL en Python
Estoy trabajando en Python e intentando ejecutar una función DLL. Puedo lograr ejecutar funciones por sus nombres si están expuestas:
# Cargar DLL en memoria.
hllDll = ctypes.WinDLL("mydll.dll")
# Configurar el prototipo y los parámetros para la llamada a la función deseada.
hllApiProto = ctypes.WINFUNCTYPE(
ctypes.c_int, # Tipo de retorno.
ctypes.c_void_p, # Parámetros 1 ...
ctypes.c_void_p,
ctypes.c_void_p,
ctypes.c_void_p # ... a través de 4.
)
hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3", 0), (1, "p4", 0)
# De hecho, mapear la llamada ("HLLAPI(...)") a un nombre en Python.
hllApi = hllApiProto(("HLLAPI", hllDll), hllApiParams)
hllApi(p1, p2, p3, p4)
Pero me gustaría crear un “funcptr” a una dirección de una función no exportada.
En C++ podemos hacer eso, por ejemplo, de esta manera (si no me equivoco):
FUNCPTR(MYDLL, myFuncName, DWORD __stdcall, (DWORD arg1, DWORD arg2, DWORD arg3), <addr>)
¿Alguien sabe cuál es el equivalente de esta función en Python?
¡Gracias!
davy.ai
Para crear un puntero de función a una dirección de una función no exportada en Python utilizando ctypes, puedes usar el siguiente código:
Reemplaza
ADDRESS
con la dirección de memoria de la función no exportada. Ten en cuenta que necesitarás saber la dirección de memoria exacta de la función de antemano, lo cual puede requerir ingeniería inversa o depurar la DLL.