Tengo el siguiente problema: cuando obtengo una traza inversa en C usando la función backtrace (3) los símbolos devuelven que el nombre de las funciones se puede determinar fácilmente con la biblioteca enana y dladdr (3).Cómo obtener el nombre de función de un puntero de función C
El problema es que si tengo un simple puntero de función (por ejemplo pasándolo & función) la dladdr + funciones enanos no pueden ayudar. Parece que el puntero es diferente del devuelto por backtrace (3) (no es extraño, ya que backtrace obtiene estos punteros de función directamente de la pila).
Mi pregunta es si hay algún método para resolver estos nombres también? Además, me gustaría saber exactamente cuál es la diferencia entre los dos indicadores.
Gracias!
ACTUALIZACIÓN:
La diferencia entre los punteros es bastante significativo:
El recibo con traza inversa es: 0x8048ca4
La versión puntero directo: 0x3ba838
Me parece que el segundo uno necesita un desplazamiento.
¿Los punteros * son * muy * diferentes, o solo un poco? – bstpierre
@bstpierre: actualizó la pregunta. – terminus
Los punteros que se encuentran en la pila generalmente son la dirección de la instrucción justo después de la llamada a la función actual. Por lo general, no son lo mismo que los punteros a la entrada de cualquier función. – RBerteig