স্ট্রেস ব্যবহার করে

স্ট্রেস আপনাকে সিস্টেম কল করে একটি প্রক্রিয়া তৈরি করে এবং সেই সিস্টেমটি কী কল করে তা দেখতে সক্ষম করে।

বিল্ডিং strace

স্ট্রেস তৈরি করতে, নিম্নলিখিতগুলি চালান:

mmma -j6 external/strace

একটি চলমান প্রক্রিয়া সংযুক্ত করা হচ্ছে

স্ট্রেসের জন্য সবচেয়ে সহজ এবং সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে এটিকে একটি চলমান প্রক্রিয়ার সাথে সংযুক্ত করা, যা আপনি এর সাথে করতে পারেন:

adb shell strace -f -p PID

-f পতাকা স্ট্রেসকে প্রক্রিয়ার সমস্ত থ্রেডের সাথে সংযুক্ত করতে বলে, এবং পরবর্তীতে যে কোনো নতুন থ্রেড তৈরি করা হয়।

একটি সাধারণ প্রক্রিয়া অনেকগুলি সিস্টেম কল করে, তাই আপনি প্রকৃতপক্ষে আগ্রহী এমন ডেটা কীভাবে সংগ্রহ করবেন তা শিখতে স্ট্রেস ম্যান পৃষ্ঠাটি পর্যালোচনা করতে চাইবেন৷

একটি অ্যাপ্লিকেশন ব্যবহার করে

একটি অ্যাপ্লিকেশনে স্ট্রেস ব্যবহার করতে:

  1. ডিভাইস সেট আপ করুন যাতে আপনি স্ট্রেস চালাতে পারেন। আপনাকে রুট হতে হবে, SELinux নিষ্ক্রিয় করতে হবে, এবং seccomp ফিল্টারটি অপসারণ করতে রানটাইম পুনরায় চালু করতে হবে যা অন্যথায় স্ট্রেসকে চলতে বাধা দেবে:
    adb root
    adb shell setenforce 0
    adb shell stop
    adb shell start
    
  2. স্ট্রেস লগের জন্য একটি বিশ্ব-লেখাযোগ্য ডিরেক্টরি সেট আপ করুন, কারণ স্ট্রেস অ্যাপের uid-এর অধীনে চলবে:
    adb shell mkdir -m 777 /data/local/tmp/strace
    
  3. ট্রেস এবং লঞ্চ করার প্রক্রিয়াটি বেছে নিন:
    adb shell setprop wrap.com.android.calendar '"logwrapper strace -f -o /data/local/tmp/strace/strace.com.android.calendar.txt"'
    
  4. প্রক্রিয়াটি স্বাভাবিকভাবে চালু করুন।

জাইগোটে ব্যবহার করা

জাইগোটে স্ট্রেস ব্যবহার করতে, প্রাসঙ্গিক 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

অ্যান্ড্রয়েড বুট করার সময় স্ট্রেস লগ পাওয়া

অ্যান্ড্রয়েড বুট করার সময় স্ট্রেস লগ পেতে, নিম্নলিখিত পরিবর্তনগুলি করুন:

  • যেহেতু প্রক্রিয়ার নাম zygote থেকে strace এ পরিবর্তিত হয়, প্রদত্ত পরিষেবাটি strace জন্য SELinux file_context অনুপস্থিত থাকার কারণে শুরু হতে ব্যর্থ হতে পারে। সমাধান হল system/sepolicy/private/file_contexts এ স্ট্রেসের জন্য একটি নতুন লাইন যোগ করা এবং মূল ফাইলের প্রসঙ্গটি অনুলিপি করা। উদাহরণ:
    /dev/socket/zygote      u:object_r:zygote_socket:s0
    + /system/bin/strace u:object_r:zygote_socket:s0
    
  • কার্নেল বা বুটকনফিগ প্যারামিটার যোগ করুন, তারপর SELinux পারমিসিভ মোডে ডিভাইস বুট করুন। আপনি BOARD_KERNEL_CMDLINEandroidboot.selinux=permissive যোগ করে বা কার্নেল সংস্করণ 5.10 বা তার বেশির সাথে Android 12-এ 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
    
    পরিবর্তন করার পর, বুট ইমেজ তৈরি ও ফ্ল্যাশ করুন এবং ডিভাইসটি অনুমতিমূলক মোডে বুট হবে।