Strace की मदद से, किसी प्रोसेस के सिस्टम कॉल और उन सिस्टम कॉल से मिलने वाले जवाबों को देखा जा सकता है.
strace बनाएं
strace बनाने के लिए, यह कमांड चलाएं:
mmma -j6 external/strace
किसी चालू प्रोसेस से अटैच करना
strace का सबसे आसान और सामान्य इस्तेमाल, इसे चालू प्रोसेस से अटैच करना है. इसके लिए, यह कमांड इस्तेमाल करें:
adb shell strace -f -p PID
-f फ़्लैग, strace को प्रोसेस के सभी थ्रेड से अटैच होने के लिए कहता है. साथ ही, बाद में स्पॉन किए गए किसी भी नए थ्रेड से अटैच होने के लिए कहता है.
किसी सामान्य प्रोसेस में कई सिस्टम कॉल किए जाते हैं. इसलिए, आपको strace man पेज की समीक्षा करनी चाहिए. इससे आपको यह जानने में मदद मिलेगी कि सिर्फ़ वह डेटा कैसे इकट्ठा किया जाए जिसमें आपकी दिलचस्पी है.
किसी ऐप्लिकेशन पर इस्तेमाल करना
किसी ऐप्लिकेशन पर strace का इस्तेमाल करने के लिए:
- डिवाइस को इस तरह सेट अप करें कि strace चलाया जा सके. आपको रूट होना चाहिए, SELinux को बंद करना चाहिए, और रनटाइम को रीस्टार्ट करना चाहिए, ताकि seccomp फ़िल्टर को हटाया जा सके. ऐसा न करने पर, strace नहीं चल पाएगा:
adb rootadb shell setenforce 0adb shell stopadb shell start - strace लॉग के लिए, ऐसी डायरेक्ट्री सेट अप करें जिसमें सभी लोग लिख सकें. ऐसा इसलिए, क्योंकि strace ऐप्लिकेशन के यूआईडी के तहत चलेगा:
adb shell mkdir -m 777 /data/local/tmp/strace - ट्रेस करने के लिए प्रोसेस चुनें और उसे लॉन्च करें:
adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
- प्रोसेस को सामान्य तरीके से लॉन्च करें.
ज़ायगोट पर इस्तेमाल करें
ज़ायगोट पर strace का इस्तेमाल करने के लिए, init.rc ज़ायगोट
लाइन को ठीक करें (इसके लिए adb shell setenforce 0 की ज़रूरत होती है):
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 बूट होने के दौरान strace लॉग पाना
Android बूट के दौरान strace लॉग पाने के लिए, ये बदलाव करें:
- प्रोसेस का नाम
zygoteसे बदलकरstraceहो गया है. इसलिए,straceके लिए SELinuxfile_contextमौजूद न होने की वजह से, दी गई सेवा शुरू नहीं हो सकती. इसके लिए,system/sepolicy/private/file_contextsमें strace के लिए एक नई लाइन जोड़ें और मूल फ़ाइल के कॉन्टेक्स्ट को कॉपी करें. उदाहरण:/dev/socket/zygote u:object_r:zygote_socket:s0 + /system/bin/strace u:object_r:zygote_socket:s0
- कर्नल या बूटकॉन्फ़िग पैरामीटर जोड़ें. इसके बाद, डिवाइस को SELinux के नीति लागू न करने वाले मोड में बूट करें. इसके लिए, Android 12 में कर्नेल वर्शन 5.10 या इसके बाद के वर्शन के साथ,
androidboot.selinux=permissiveकोBOARD_KERNEL_CMDLINEयाBOARD_BOOTCONFIGमें जोड़ा जा सकता है. (यह वैरिएबल,build/core/Makefileमें सिर्फ़ पढ़ने के लिए उपलब्ध होता है. हालांकि, यह/device/*/BoardConfigमें हमेशा उपलब्ध होता है.)
/device/google/marlin/sailfish/BoardConfig.mkमें Pixel (sailfish) डिवाइस का उदाहरण: बदलाव करने के बाद, बूट इमेज बनाएं और उसे फ़्लैश करें. इसके बाद, डिवाइस अनुमतियों वाले मोड में बूट होगा.- BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... +BOARD_KERNEL_CMDLINE := .... androidboot.hardware=sailfish ... androidboot.selinux=permissive