Pregunta

Espero cargarLibrary en un DLL de C ++ no administrado con código administrado, y luego llamar a GetProcAddress en funciones externas que han sido destrozadas.¿Mi pregunta es los nombres desagradados que obtienes de un compilador de C ++ determinista?Es decir: ¿El nombre siempre se convirtió al mismo nombre destrozado, si la firma del original no ha cambiado?

¿Fue útil?

Solución

no está especificado por el estándar, y ciertamente ha cambiado entre versiones del mismo compilador en mi experiencia, aunque tiene que ser determinista en algún conjunto fijo de circunstancias, porque de lo contrario no habría manera de vincularse por separadoMódulos compilados.

Si está utilizando GetProcAddress, sería mucho más limpio exportar las funciones como extern "C" para que sus nombres no se deslicen.

Otros consejos

Es específico del compilador, ya que otros han dicho.Sin embargo, puede encontrar detalles en un documento de Agner Fog ...

http://www.agner.org/optimize/#manuals

Ver artículo 5 en esa página.

también, en estos días, hay bibliotecas que pueden manejar el desembolso y desmanileo para los compiladores comunes para usted.Para Visual C ++, el punto de partida sería las bibliotecas DBGHELP e ImageHLP.

http://msdn.microsoft.com / EN-EE. UU. / Library / MS679292% 28V= vs.85% 29.aspx

http://msdn.microsoft.com / EN-EE. UU. / Biblioteca / MS680321% 28V= vs.85% 29.aspx

El mango de nombre se maneja de manera diferente por cada compilador (tal vez o no, no hay estándar).Si usa las funciones puras de C en su código C ++, puede usar el "C" externo para suprimir el nombre de Mangeling para las funciones de C para que el compilador pueda encontrarlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top