Ta définition n’est pas loin du compte. Tu instrumentes le chargeur dynamique (ld.so) pour voir ce qui se passe dans tes programmes. Cela permet de tracer l'appel et le retour de fonctions appartenant aux bibliothèques partagées.
Imaginons que tu instrumentes un programme comme "less": $ ldd `which less`
linux-gate.so.1 => (0xb774b000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb76fc000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75b5000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb75b0000)
/lib/ld-linux.so.2 (0xb774c000)
On voit ici le chargeur dynamique ld-linux.so. linux-gate.so n’est pas vraiment un bibliothèque partagée, mais plutôt une fonctionnalité exposée pas le noyau Linux.
"less" est donc linké avec les bibliothèques suivantes : libc, libncurses, et libdl. Chaque bibliothèque expose des méthodes (entre autres, tu peux les examiner avec objdump).
En instrumentant ld.so, latrace va permet d’examiner en temps réel tout ce qui se passe dans le programme, et ainsi de voir les appels à chaque fonction des bibliothèques dynamiques : $ latrace less
19810 __libc_start_main [/lib/i686/cmov/libc.so.6]
19810 getenv [/lib/i686/cmov/libc.so.6]
19810 isatty [/lib/i686/cmov/libc.so.6]
19810 getenv [/lib/i686/cmov/libc.so.6]
19810 tgetent [/lib/libncurses.so.5]
19810 _nc_setupterm [/lib/libncurses.so.5]
19810 strlen [/lib/i686/cmov/libc.so.6]
19810 isatty [/lib/i686/cmov/libc.so.6]
19810 calloc [/lib/i686/cmov/libc.so.6]
19810 _nc_read_entry [/lib/libncurses.so.5]
19810 sprintf [/lib/i686/cmov/libc.so.6]
19810 _nc_pathlast [/lib/libncurses.so.5]
19810 strrchr [/lib/i686/cmov/libc.so.6]
[...]
19810 getenv [/lib/i686/cmov/libc.so.6]
19810 strlen [/lib/i686/cmov/libc.so.6]
19810 calloc [/lib/i686/cmov/libc.so.6]
19810 snprintf [/lib/i686/cmov/libc.so.6]
19810 write [/lib/i686/cmov/libc.so.6]
Missing filename ("less --help" for help)
19810 fsync [/lib/i686/cmov/libc.so.6]
19810 tcsetattr [/lib/i686/cmov/libc.so.6]
19810 exit [/lib/i686/cmov/libc.so.6]
19810 __cxa_finalize [/lib/i686/cmov/libc.so.6]
19810 __cxa_finalize [/lib/i686/cmov/libc.so.6]
less finished - exited, status=0
Note: "ldd" exécute du code présent dans le binaire, et n’est donc pas adapté à de l’analyse forensique. Lui préférer "objdump" : $ objdump -p `which less` |grep NEEDED
NEEDED libncurses.so.5
NEEDED libc.so.6
[^] # Re: Instrumenter ?
Posté par Aissen . En réponse à la dépêche latrace, le traceur qui instrumente le chargeur dynamique. Évalué à 4.
Imaginons que tu instrumentes un programme comme "less":
$ ldd `which less`
linux-gate.so.1 => (0xb774b000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb76fc000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75b5000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb75b0000)
/lib/ld-linux.so.2 (0xb774c000)
On voit ici le chargeur dynamique ld-linux.so. linux-gate.so n’est pas vraiment un bibliothèque partagée, mais plutôt une fonctionnalité exposée pas le noyau Linux.
"less" est donc linké avec les bibliothèques suivantes : libc, libncurses, et libdl. Chaque bibliothèque expose des méthodes (entre autres, tu peux les examiner avec objdump).
En instrumentant ld.so, latrace va permet d’examiner en temps réel tout ce qui se passe dans le programme, et ainsi de voir les appels à chaque fonction des bibliothèques dynamiques :
$ latrace less
19810 __libc_start_main [/lib/i686/cmov/libc.so.6]
19810 getenv [/lib/i686/cmov/libc.so.6]
19810 isatty [/lib/i686/cmov/libc.so.6]
19810 getenv [/lib/i686/cmov/libc.so.6]
19810 tgetent [/lib/libncurses.so.5]
19810 _nc_setupterm [/lib/libncurses.so.5]
19810 strlen [/lib/i686/cmov/libc.so.6]
19810 isatty [/lib/i686/cmov/libc.so.6]
19810 calloc [/lib/i686/cmov/libc.so.6]
19810 _nc_read_entry [/lib/libncurses.so.5]
19810 sprintf [/lib/i686/cmov/libc.so.6]
19810 _nc_pathlast [/lib/libncurses.so.5]
19810 strrchr [/lib/i686/cmov/libc.so.6]
[...]
19810 getenv [/lib/i686/cmov/libc.so.6]
19810 strlen [/lib/i686/cmov/libc.so.6]
19810 calloc [/lib/i686/cmov/libc.so.6]
19810 snprintf [/lib/i686/cmov/libc.so.6]
19810 write [/lib/i686/cmov/libc.so.6]
Missing filename ("less --help" for help)
19810 fsync [/lib/i686/cmov/libc.so.6]
19810 tcsetattr [/lib/i686/cmov/libc.so.6]
19810 exit [/lib/i686/cmov/libc.so.6]
19810 __cxa_finalize [/lib/i686/cmov/libc.so.6]
19810 __cxa_finalize [/lib/i686/cmov/libc.so.6]
less finished - exited, status=0
Note: "ldd" exécute du code présent dans le binaire, et n’est donc pas adapté à de l’analyse forensique. Lui préférer "objdump" :
$ objdump -p `which less` |grep NEEDEDNEEDED libncurses.so.5
NEEDED libc.so.6