macososx-elcapitandtracetrussdtruss

dtruss fails on ps on OS X 10.11


I was trying to see which syscall ps uses to get the command line of a process on OS X 10.11 (El Capitan), and ran into the following error:

# dtruss ps -p 43520 -o args

dtrace: failed to execute ps: dtrace cannot control executables signed with restricted entitlements

Googling resulted in the suggestion that making a copy of ps would allow me to bypass this, but that didn't work for me. Why can't I run dtruss on arbitrary binaries anymore, and is there any way for me to restore the old behavior?


Solution

  • The issue has to do with the code signature. If you make a copy and then re-sign it with your own identity (or, presumably, any non-Apple identity), then dtrace will attach to it just fine.

    $ mkdir ~/temp
    $ cp /bin/ps ~/temp/
    $ codesign -f -s `whoami` ~/temp/ps
    $ sudo dtruss ~/temp/ps -p 43520 -o args