strace'i kullanma

Düzey, sistemin bir bu işlemin sonucu ve bu sistem tarafından çağrılan öğelerin döndürdüğü işlemlerdir.

strace oluşturma

strace'i derlemek için aşağıdakileri çalıştırın:

mmma -j6 external/strace

Çalışan bir sürece ekleme

strace'in en basit ve en yaygın kullanım alanı, çalışan bir işleme eklemektir. Bunu aşağıdaki yöntemlerle yapabilirsiniz:

adb shell strace -f -p PID

-f işareti, strace'e öğedeki tüm ileti dizilerine eklemesini söyler süreci ve daha sonra ortaya çıkan yeni ileti dizileri.

Tipik bir işlem çok sayıda sistem çağrısı yapar. Bu nedenle, yalnızca ilgilendiğiniz verileri nasıl toplayacağınızı öğrenmek için strace man sayfasını incelemeniz gerekir.

Uygulamada kullanma

Bir uygulamada strace kullanmak için:

  1. Cihazı, strace'i çalıştırabilecek şekilde ayarlayın. Kök olmanız, SELinux'u devre dışı bırakmanız ve yeniden başlatmanız gerekir seccomp filtresini kaldırın. Aksi takdirde, strace'in çalışmasını engelleyecek:
    adb root
    adb shell setenforce 0
    adb shell stop
    adb shell start
    
  2. strace günlükleri uygulamanın kullanıcı kimliği:
    adb shell mkdir -m 777 /data/local/tmp/strace
    
  3. İzlenecek işlemi seçin ve başlatın:
    adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
    
  4. İşlemi normal şekilde başlatın.

Zigotta kullanma

Zigot üzerinde strace'i kullanmak için ilgili init.rc zygote satırını düzeltin (adb shell setenforce 0 gerekir):

cd system/core/
patch -p1 <<EOF
--- a/rootdir/init.zygote32.rc
+++ b/rootdir/init.zygote32.rc
@@ -1,4 +1,4 @@
-service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
+service zygote /system/bin/strace -o /data/local/tmp/zygote.strace /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
     class main
     socket zygote stream 660 root system
     onrestart write /sys/android_power/request_state wake
EOF

Android başlatma sırasında strace günlükleri alma

Android başlatma sırasında strace günlüklerini almak için aşağıdaki değişiklikleri yapın:

  • İşlem adı zygote yerine strace olarak değiştiğinden, strace için SELinux file_context eksik olduğundan söz konusu hizmet başlatılamayabilir. Çözüm system/sepolicy/private/file_contexts bölgesinde strace için yeni satır ekle ve orijinal dosya bağlamını kopyalayın. Örnek:
    /dev/socket/zygote      u:object_r:zygote_socket:s0
    + /system/bin/strace u:object_r:zygote_socket:s0
    
  • kernel veya bootconfig parametresini ekleyin, ardından cihazı SELinux izin verici modunda önyükleyin. Şunları yapabilirsiniz: bunu, şuraya androidboot.selinux=permissive ekleyerek yapabilirsiniz: BOARD_KERNEL_CMDLINE veya Android'de BOARD_BOOTCONFIG 5.10 veya daha yeni çekirdeklerle 12. (Bu değişken build/core/Makefile içinde salt okunur olur, ancak her zaman /device/*/BoardConfig altında mevcuttur.)

    Pixel (sailfish) cihaz örneği /device/google/marlin/sailfish/BoardConfig.mk:
    - BOARD_KERNEL_CMDLINE := ....  androidboot.hardware=sailfish ...
    +BOARD_KERNEL_CMDLINE := ....  androidboot.hardware=sailfish ...  androidboot.selinux=permissive
    
    Değişikliği yaptıktan sonra, önyükleme görüntüsünü derleyip flaşlayın. Böylece cihaz izin verici modda önyüklenir.