linux-kernel - org - print kernel version linux
Llamador de función en el kernel de Linux (4)
Para obtener el nombre de la función de la persona que llama, se puede usar el siguiente comando printk.
printk ("La persona que llama es% pF / n", __builtin_return_address (0));
¿Hay alguna manera de obtener la función caller en el kernel de Linux? Sé que __ func __ devuelve el nombre de la función que se está ejecutando. Estoy buscando la función que se llama " __ func __ "
Si se necesitan o no punteros de cuadro depende del arco, IIRC. Para x86, ciertamente se desean explotar completamente estas características. También tenga en cuenta que la alineación puede sesgar la precisión de builtin_return_address por esta misma razón.
Si solo desea un volcado de pila para ver cómo se alcanzó un lugar, use mejor la función dump_stack()
que tratando de jugar con la dirección incorporada_return.
También puede imprimir todo el contenido de la pila de llamadas llamando a dump_stack ().
Puede obtener a la persona que llama con __builtin_return_address(0)
.
El llamador de la persona que llama es __builtin_return_address(1)
y así sucesivamente.
Es una extensión de GCC, documentada en el manual de gcc: http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html
Edit: Probablemente debería señalar, que le da la dirección de la persona que llama. Si desea el nombre de la función, puede imprimirlo con %pS
, por ejemplo:
printk("Caller is %pS/n", __builtin_return_address(0));
Si no desea imprimirlo, puede usar kallsyms_lookup()
etc.