1
0

leak 1005 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/rc
  2. rfork e
  3. usage='prog-or-pid'
  4. FLAGs=()
  5. FLAGb=()
  6. FLAGr=()
  7. FLAGx=()
  8. eval `{aux/getflags bsx:1r:1f:1 $*}
  9. if(~ $#* 0) {
  10. echo 'usage: leak [-s] [-f binary] [-b [-r res] [-x width]] '$usage >[1=2]
  11. exit usage
  12. }
  13. sflag=()
  14. xflag=()
  15. if(~ $#FLAGs 1)
  16. sflag=($sflag -s)
  17. if(~ $#FLAGf 1)
  18. sflag=($sflag -f $FLAGf)
  19. if(~ $#FLAGb 1)
  20. xflag=($xflag -b)
  21. if(~ $#FLAGr 1)
  22. xflag=($xflag -r $FLAGr)
  23. if(~ $#FLAGx 1)
  24. xflag=($xflag -x $FLAGx)
  25. if(~ $#FLAGs 1 && ~ $#FLAGb 1){
  26. echo 'cannot use both -s and -b' >[1=2]
  27. exit usage
  28. }
  29. if(! test -d /proc/$1) {
  30. # x=`{psu | awk '$NF=="'$1'" {print $2}'}
  31. x=`{psu | grep ' '$1'$' | sed 's/^[^ ]+ +([0-9]+).*/\1/'}
  32. if(~ $#x 0) {
  33. echo 'no processes named '$1 >[1=2]
  34. exit usage
  35. }
  36. x=($sflag $xflag $x)
  37. echo leak $"x
  38. exit
  39. }
  40. x=`{echo $"* | tr ' ' ,}
  41. echo 'leakdump({'$x'})' | acid -lpool -lleak $1 $FLAGf | aux/acidleak $xflag $binary |
  42. {
  43. if(~ $#FLAGs 1)
  44. awk '{print $4}' |
  45. sort | uniq -c | sort -nr |
  46. sed 's! *(.*) (0x.*)!src(\2); // \1!'
  47. if not
  48. cat
  49. }