visual studio microsoft files create crear c++ c dll function

c++ - studio - Obtener firmas de funciones exportadas en un archivo DLL



microsoft dll (3)

¿Es posible obtener una firma exportada (estilo C?) De la función (parámetro count / types, return type) de una DLL? Puedo ver la lista de nombres de funciones, direcciones, ordinales, etc. con DLL Export Viewer pero no puedo ver las firmas. Solo tengo el archivo dll y no tengo archivos .h ni .def.

ACTUALIZACIÓN: Utilizando una herramienta llamada API Monitor , puedo adjuntarme a un proceso que utiliza el dll mencionado y ver las llamadas a las funciones. Esto me permite ver el número de parámetros, el valor de retorno y sus valores enteros (¿punteros?) Pero esto no ayuda mucho. Probablemente debería encontrar una manera de determinar a qué tipo de estructuras apuntan esos indicadores en el momento de la llamada.


En C ++, las firmas de función son " destrozadas " en el nombre de una manera dependiente del compilador. Esto no sucede en C. Por lo tanto, si tiene funciones C en su archivo DLL, verá nombres no protegidos. Si es uno de C ++, verás los truncos.

C ++ necesita nombres destrozados para permitir que el enlazador resuelva funciones sobrecargadas con diferentes firmas.

No creo que haya ninguna forma de obtener las funciones de una DLL "C". Simplemente no están presentes.


Para las funciones C, esta información no se almacena en absoluto en la DLL. Lo único que puedo sugerir es desmontar la función y ver cómo interactúa con las variables en la pila y luego intentar determinar la firma.

¡Buena suerte!


Las DLL no almacenan las firmas de las funciones que exportan. Otras respuestas han mencionado C ++, y cuando una función de C ++ se exporta como C ++ , entonces el nombre será realmente destrozado. Demangle con el esquema de manipulación correcto del compilador, y tendrá la firma. Pero la mayoría de las DLL no exportan funciones de C ++ utilizando sus nombres de C ++. En cambio, las funciones que una DLL elige exportar se exportan utilizando nombres de estilo C, por lo que incluso si la DLL se escribió en C ++, las funciones exportadas aún no tendrán ninguna información de firma.

Usted no tiene el encabezado? La mayoría de los proveedores incluyen ese tipo de cosas en sus SDK. Si no obtuvo uno, entonces presente una queja al vendedor. Si no se supone que debes obtener uno, entonces tal vez estás haciendo tu tarea de la manera incorrecta; ¿Estás seguro de que debes usar esa DLL directamente?

Si no tiene el archivo de encabezado, entonces también podría preguntarse si realmente está permitido, legalmente, usar la DLL en su programa de todos modos. Si es solo una DLL arbitraria que encontró en su sistema, incluso si puede escribir código para ella, probablemente no podrá redistribuirla cuando envíe su programa.