2017-06-06 3 views
4

Je souhaite lire l'adresse de l'espace utilisateur de lldb lors du débogage du pilote de la machine distante (kext) via kdp. Je sais que dans le code que je pourrais utiliser copyin afin de déplacer le code du noyau d'espace et de le lire facilement, comme prévu quand je l'ai essayé de lire la mémoire utilisateur directement, il a échoué:Lire l'adresse de l'adresse de l'espace utilisateur lors du débogage kext

(lldb) memory read 0x000070000d15a024 
error: kdp read memory failed (error 4) 

est là une alternative à copyin lors de la session de débogage d'exécution pour convertir mes données quelque part je pourrais le lire à partir du débogueur?

grâce

Répondre

1

En supposant que vous chargez les scripts de débogage pour le noyau spécifique que vous utilisez (devrait être dans le KDK approprié), vous avez la commande printuserdata.

C'est sa description:

printuserdata: 
    Read userspace data for given task and print based on format provided. 
    Syntax: (lldb) printuserdata <task_t> <uspace_address> <format_specifier> 
    params: 
     <task_t> : pointer to task 
     <uspace_address> : address to user space memory 
     <format_specifier> : String representation for processing the data and printing it. 
          e.g Q -> unsigned long long, q -> long long, I -> unsigned int, i -> int 
          10i -> 10 ints, 20s -> 20 character string, s -> null terminated string 
          See: https://docs.python.org/2/library/struct.html#format-characters 
    options: 
     -X : print all values in hex. 
     -O <file path>: Save data to file 

Exemple invocation:

(lldb) printuserdata 0xffffff8013257d80 0x00007fff941f5000 10c