//------------------------------------------------------------------- // footprint.c // // For showing the amount of memory used by the current task. // // programmer: ALLAN CRUSE // written on: 15 FEB 2005 //------------------------------------------------------------------- #include // for init_module() #include // for create_proc_info_entry() #include // for 'vm_area_struct' static char modname[] = "footprint"; static int my_get_info( char *buf, char **start, off_t off, int count ) { struct task_struct *task = current; struct vm_area_struct *vma; unsigned int areasize, tasksize, i = 0, len = 0; len += sprintf( buf+len, "\nUserspace memory-footprint for task " ); len += sprintf( buf+len, "\'%s\' (pid=%d)\n\n", task->comm, task->pid ); tasksize = 0; if ( task->mm != NULL ) { vma = task->mm->mmap; while ( vma != NULL ) { ++i; areasize = vma->vm_end - vma->vm_start; len += sprintf( buf+len, "%6d ", i ); len += sprintf( buf+len, "%08lX-", vma->vm_start ); len += sprintf( buf+len, "%08lX ", vma->vm_end ); len += sprintf( buf+len, "areasize=%08X\n", areasize ); tasksize += areasize; vma = vma->vm_next; } } len += sprintf( buf+len, "\nTotal size of the memory-footprint: " ); len += sprintf( buf+len, "%08X \n", tasksize ); len += sprintf( buf+len, "\n" ); return len; } int init_module( void ) { create_proc_info_entry( modname, 0, NULL, my_get_info ); return 0; //SUCCESS } void cleanup_module( void ) { remove_proc_entry( modname, NULL ); } MODULE_LICENSE("GPL");