Noobs69 | Ca plante DANS la fonction.
Ca rentre, ca ne sort plus jamais.
Je compile sous cygwin avec :
gcc-3.3.4
glibc-2.3.2/arm-linux/bin/gcc
Je crée un hook de la fonction gettimeofday ainsi :
Code :
- int gettimeofday (struct timeval *tv, struct timezone *tz) {
- int ret;
- if ( ! hook._gettimeofday )
- hook._gettimeofday = (int (*)())dlsym( RTLD_NEXT, "gettimeofday" );
- if (test == 0) {
- test++;
- process_run(123);
- test--;
- }
- ret = wrapper._gettimeofday( tv, tz );
- return ret;
- }
- int process_run(pid_t proc_id) {
- struct dirent **namelist=NULL;
- int n;
- if ( ( n = scandir( "/proc", &namelist, is_procdir, reverse_numsort ) ) < 0) {
- perror( "process_run: scandir /proc " );
- return (0);
- }
- while(n--) {
- procinfo(atoi(namelist[n]->d_name));
- free(namelist[n]);
- }
- free(namelist);
- return (found ? 1 : 0);
- }
- static void print_procinfo(int procdir) {
- char fullpath[sizeof "/proc/" + NAME_MAX + 1 + sizeof "/stat"];
- char name[NAME_MAX + 1];
- FILE * F = NULL;
- pid_t pid;
- int fd=0;
- char target_name[252];
- /* C'est un simple essai pour vérifier que readlink fonctionne bien (et c'est le cas) */
- sprintf( fullpath, "/proc/%d/exe", procdir );
- printf("proc=%s\n", fullpath);
- fd = readlink( fullpath, target_name, sizeof(target_name)-1);
- target_name[fd]='\0';
- printf("target=[%d]%s\n", fd, target_name);
- sprintf( fullpath, "/proc/%d/stat", procdir );
- printf("proc=%s\n", fullpath);
- fflush(stdout);
- /* Clairement, ça ne marche que jusque là ! fopen doit attendre et ne sort plus, pourquoi ? mystère ? */
- /* Meme essai avec open et close, même problème */
- if(( F = fopen( fullpath, "r" )) != NULL ) {
- if( fscanf( F, "%d (%[^)]s)", &pid, name ) == 2 )
- printf( "pid=%-6d\tname=%s\n", pid, name );
- else
- printf("Error on fscanf fullpath=%s\n", fullpath);
- fclose (F);
- }
- else
- printf("Error on fopen fullpath=%s\n", fullpath);
- }
|
Et je charge via LD_PRELOAD=malib.so.
Quelqu'un a une idée ?
Soit de faire fonctionner fopen ou open,
Soit de remplacer par d'autres fonctions pour lire le nom du processus.
A votre bon coeur ! Message édité par Noobs69 le 16-07-2011 à 18:31:10
|