2017-09-19 8 views
2

J'ai besoin de déboguer mon module noyau Solaris, en particulier d'extraire les données dans une structure transmise par référence à ma fonction noyau. J'ai écrit un script systemtap sous linux pour accéder à l'argument et extraire des données.Impression d'arguments dans une fonction noyau dans dtrace

Comment puis-je faire cela en utilisant DTRACE pour les modules solaris.

J'ai essayé à la recherche dans le système et essayer quelques commandes, mais c'est tout ce que je sais DTrace:

[[email protected] ~]#dtrace -l | grep msg_recv 
7090  fbt    mymod      msg_recv1 entry 
7091  fbt    mymod      msg_recv1 return 
7548  fbt    mymod      msg_recv entry 
7549  fbt    mymod      msg_recv return 
+0

Ceci est probablement pertinent: http://dtrace.org/guide/chp-structs.html –

Répondre

0

DTrace est similaire sur le plan conceptuel à SystemTap (en fait, vice versa comme SystemTap est venu plus tard):

  1. Comme SystemTap, il peut attacher probes à fonctionner, mais il nécessite une syntaxe différente:

    kernel.function("xxx")     -> fbt:genunix:xxx:return 
    module("mod").function("xxx")   -> fbt:mod:xxx:entry 
    module("mod").function("xxx").return -> fbt:mod:xxx:return 
    
  2. Accès arguments est tout à fait différent que DTrace ne supporte pas NAIN pour les noms d'argument (il a arg0 .. arg9 variables qui contient uintptr_t valeurs des arguments):

    @cast($skpb, "struct sk_buff", "mod") -> ((struct sk_buff*) arg0) 
    
  3. Accès aux données dans le noyau, est similaire , mais printing fonctions sont différentes:

    print($skpb->sk_field)     -> trace(args[0]->sk_field) 
    print("%32m", $src)     -> tracemem(arg2, 32) 
    

J'ai ajouté des liens vers mon o livre de stylo sur DTrace/SystemTap où vous pouvez trouver plus d'informations