2015-10-22 19 views
7

ben aşağıdaki hata ps OS X 10.11 (El Capitan) üzerinde bir sürecin komut satırı almak için kullandığı syscall ve yayınladığını görmek için çalışıyordu:dtruss OS üzerinde ps üzerinde başarısız X 10.11

# dtruss ps -p 43520 -o args 

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

Googling, ps'un bir kopyasının bu işi atmamı sağladığını öne sürdü, ancak bu benim için işe yaramadı. Neden artık rasgele ikili dosyalar üzerinde dtruss çalıştırılamıyor ve eski davranışı geri yüklemek için herhangi bir yol var mı?

cevap

10

konu kodu imzayla ilgisi var. Bir kopya çıkarırsanız ve kendi kimliğinizle (veya muhtemelen Apple olmayan bir kimliğinizle) yeniden imzalarsanız, dtrace buna eklenir.

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

Evet, bu durum, kaynak koddaki yorumun kısıtlı yetkilendirmelerle imzalanan işleme atıfta bulunduğundan anlam ifade eder, bu nedenle imzanın kaldırılması, mantığın nasıl işlendiğini değiştirir. – TheDarkKnight

4

cannot control executables signed with restricted entitlements

Güvenlik Bütünlüğü Koruması ('rootless') artık dtruss'un burada çalışmasını engelliyor.

Kurtarma modunda boot ederek yapabilirsiniz disable it

, ancak bu "kontrol edemez dtrace" ararsanız source code de görülebileceği gibi DTrace özellikle bakılmaksızın yurtsuzluğun devletin engellendi benziyor.

Ayrıca Pcreate içinde yorumlardan görebilirsiniz:

/* 
    * <rdar://problem/13969762>: 
    * If the process is signed with restricted entitlements, the libdtrace_dyld 
    * library will not be injected in the process. In this case we kill the 
    * process and report an error. 
    */ 
+0

Devre dışı bırakılması gerçekten işe yarıyor mu? – Glyph

+0

@Glyph, Sistem süreçleri üzerinde çalışmamak için özel olarak dtrace yapılmamıştır. Cevabı güncelledim. – TheDarkKnight