Uso kprobe función kernel a la falta de energía eléctrica Linux kprobe instalación kernel ejemplo observación es SystemTap sondeo funciones implementadas en la función del núcleo, ya que la API del núcleo para proporcionar un uso formal de kprobe, por lo que muchos programadores de núcleo , tal vez más conveniente que kprobe directamente uso SystemTap. kernel proporciona tres tipos de carretilla para kprobe, respectivamente JProbe, kprobe, kretprobe, el siguiente código es ejecutado en un TCP función arp_process /IP con la sonda tres observación en ip_route_input de () llamada devuelve el resultado de este código también ilustra un método de intercambio de parámetros entre la sonda y el mismo controlador de función de entrada Ret código del controlador es el siguiente: .. windows7 culpa
arp_probe.c /* * arp_probe.c, por Qianfeng Zhang ([email protected]) * /
#include #include #include #include #include #include #include #include
MODULE_AUTHOR (" frzhang @ redhat.com "); module_description (" Un módulo para realizar un seguimiento de los resultados de llamada de ip_route_input () dentro arp_process usando JProbe y kretprobe "); MODULE_LICENS E (" GPL ");
static int j_arp_process (struct sk_buff * SKB) {struct net_device * dev = skb- > dev; struct in_device * in_dev; int no_addr, RPF;
in_dev = in_dev_get (dev); no_addr = (in_dev- > ifa_list == NULL); RPF = (in_dev) IN_DEV_RPFILTER; in_dev_put (in_dev); printk (" \\ narp_process () se llama con dispositivo de interfaz% s, in_dev (no_addr =% d, RPF =% d) \\ n ", dev- > nombre, no_addr, FPR); jprobe_return (); return (0);};
int j_fib_validate_source estático (__ src be32, dst __be32, tos U8, int oif, struct net_device * dev, __be32 * spec_dst, u32 * itag, marca u32)
{printk (" fib_validate_source () se llama con dst = 0x% x, oif = % d \\ n ", dst, OIF); jprobe_return (); return (0);};
estática my_jp1 struct JProbe = {.entry = j_arp_process, .kp.symbol_name = " arp_process "};
estática struct JProbe my_jp2 = {.entry = j_fib_validate_source, .kp.symbol_name = " fib_validate_source "};
static int entry_handler (struct kre tprobe_instance * ri, pt_regs struct * regs) {printk (" de llamada:% s () \\ n ", RI- > RP > kp.symbol_name); return (0);};
static int return_handler (struct kretprobe_instance * ri, pt_regs struct *, reglas) {int eax;
eax = regs- > ax &0xffff; printk (" Volviendo:% s () con un valor de retorno: 0x% lx (64 bits) 0x% x (32 bits) \\ n ", RI- > RP > kp.symbol_name, regs- > hacha, eax);
retorno (0);};
static int fib_lookup_entry_handler (kretprobe_instance struct * ri, pt_regs struct * regs) {struct fib_result * resp;
resp = (struct fib_result *) regs- > dx; printk (" Calling :% s () \\ n ", RI- > RP > kp.symbol_name); * ((struct fib_result **) RI- > datos) = resp;
retorno (0); };
int fib_lookup_return_handler estático (kretprobe_instance struct * ri, pt_regs struct * regs) {struct fib_result * resp; int eax;
eax = regs- > ax &0xffff; resp = * ((fib_result struct **) RI- > datos); printk (" Volviendo: fib_lookup () con un retorno valor: 0x% lx (64 bits) 0x% x (32 bits), result- > Tipo:% d \\ n ", regs- > hacha, eax, resp- > tipo);
retorno ( 0);}
estática my_rp1 struct kretprobe = {.handler = return_handler, .entry_handler = entry_handler, .kp.symbol_name = " ip_route_input_slow "};
estático struct kretprobe my_rp2 = {.handler = return_handler, .entry_handler = entry_handler, .kp.symbol_name = " fib_validate_source "};
struct kretprobe my_rp3 estática = {.handler = fib_lookup_return_handler ,. entry_handler = fib_lookup_entry_handler, .kp.symbol_name = " fib_lookup ", .data_size = sizeof (struct fib_result *)};
static int init_myprobe __init (void) {int ret;
printk ( " RTN_UNICAST es% d \\ n ", RTN_UNICAST); if ((ret = register_jprobe (&my_jp1)) < 0) {printk (" register_jprobe% s fallidos, regresaron% d \\ n ", my_jp1.kp. symbol_name, ret); retorno (-1);}
if ((ret = register_jprobe (&my_jp2)) < 0) {printk (" regi ster_jprobe% s fallidos, regresaron% d \\ n ", my_jp2.kp.symbol_name, ret); retorno (-1);}
if ((ret = register_kretprobe (&my_rp1)) < 0) {printk (" register_kretprobe% s fallidos, regresado% d \\ n ", my_rp1.kp.symbol_name, ret); unregister_jprobe (&my_jp1); unregister_jprobe (&my_jp2); retorno (-1);}
if ((ret = register_kretprobe (&my_rp2)) < 0) {printk (" register_kretprobe% s fallidos, regresaron% d \\ n ", my_rp2.kp.symbol_name, ret); unregister_jprobe (&my_jp1 ); unregister_jprobe (&my_jp2); unregister_kretprobe (&my_rp1); retorno (-1);}
if ((ret = register_kretprobe (&my_rp3)) < 0) {printk (" register_kretprobe% s fallidos, regresaron% d \\ n ", my_rp3.kp.symbol_name, ret); unregister_jprobe (&my_jp1); unregister_jprobe (&my_jp2); unregister_kretprobe (&my_rp1); unregister_kretprobe (&my_rp2); regreso (-1);}
return 0;}
no puede escribir datos en el disco duro de un sistema Linux o UNIX? Para resolve
Para garantizar el funcionamiento normal del sistema Linux y resolver con precisión los diversos pro
¿Cómo veo todos los procesos en ejecución en Linux? Puedes usar el comando ps.
Requisitos del sistema: versión ilimitada, requiere una plataforma de PC (CPU de arquitectura x86),
Tutorial básico de entrada a la programación en red Unix
Linux cómo modificar el nombre de la computadora
inicio nginx, reiniciar, apagar el comando de parada de operación para detener la operación
El principio de la inyección de la memoria entre procesos de Windows CE
En Symfony2 Nginx tutorial de configuración
Método de arranque sin disco de Linux detallado
Linux Crontab usa el tutorial básico
Linux /Windows /Mac actualizan el caché de DNS
Archivos de Linux, descriptores de archivos y dup () y dup2 ()
Programa ejecutable de Linux para realizar un servicio y un método de inicio automático de arranque
problemas de procesamiento temporizador servidor Linux a tener en cuenta
Win10 utiliza por defecto la forma de abrir el teclado numérico
Cómo oculta Win 7 la partición del disco duro
Después de hacer doble clic en el acceso directo, el sistema ya no es
Cómo configurar el método de entrada chino en el entorno Linux
Sistema Win7 de 64 bits cómo configurar la conexión automática automática ADSL
Windows 10 inalámbrico wifi tutorial abierto
¿En qué circunstancias es mejor desactivar el cortafuegos de red del sistema win7
¿Por qué Windows XP se apaga y se reinicia?
Seis consejos para la configuración de seguridad para principiantes de computadora XP