GNU/Linux >> Belajar Linux >  >> Linux

Bisakah Strace/ptrace Menyebabkan Program Rusak?

Jadi baru-baru ini, saya mendiskusikan strace dengan seseorang, dan mereka bertanya apa yang akan terjadi jika Anda menelusuri proses yang sedang berjalan seperti membuat soket jaringan atau yang serupa. Mungkinkah ini menyebabkan program mogok dengan cara yang tidak terduga?

Dari apa yang saya baca tentang ptrace, syscall yang digunakan oleh strace, seharusnya tidak dapat menyebabkan hal seperti itu jika Anda hanya men-debug sebuah utas. Proses dihentikan, setiap kali syscall dipanggil, tetapi nanti harus dilanjutkan dan tidak ada yang lebih bijaksana. Sinyal diantrekan saat tidak berjalan, jadi saya berasumsi hal serupa terjadi dengan syscalls/sockets/listen.

Bisakah ptrace yang digunakan dalam konteks strace menyebabkan proses aneh macet?

Jawaban yang Diterima:

Tidak , strace seharusnya tidak menyebabkan crash program –

Kecuali dalam kasus yang agak tidak biasa ini:

Jika memiliki bug yang bergantung pada waktu eksekusi , atau lokasi memoritime waktu proses .

Ini dapat memicu “heisenbug . semacam ini ” – tetapi sangat jarang, karena jenis bug ini jarang terjadi, dan hanya perlu dipicu di bawah strace atau instrumentasi lainnya.
Dan ketika Anda menemukan heisenbug, itu sering kali merupakan hal yang baik.

Mengenai ptrace() – syscall – itulah yang strace tidak di dalam saya pikir, jadi mirip. Seseorang dapat melakukan lebih dari strace bisa saat menggunakan ptrace() secara langsung.

Contoh Anda adalah bug semacam ini:

Dalam contoh, strace akan mengubah waktu langkah-langkah untuk membuat koneksi jaringan. Jika itu menyebabkan masalah, itu adalah "masalah yang menunggu untuk terjadi" - waktu eksekusi berubah terus-menerus. Dengan strace , hanya sedikit lagi. Tetapi aplikasi lain dapat lebih mengubah waktu, seperti memulai sebuah program.


Linux
  1. dapatkah suatu program membaca bagian elfnya sendiri?

  2. program lynx gagal dengan 'Tidak dapat mengakses file awal'?

  3. Bagaimana Saya Dapat Membuat File Dump dari Proses yang Berjalan di Linux?

  1. Bagaimana cara pengelola file memasang drive tanpa root?

  2. Mengapa saya tidak dapat merusak sistem saya dengan fork bomb?

  3. Apa yang dapat menyebabkan sinyal 11?

  1. 7 Contoh Strace untuk Debug Eksekusi Program di Linux

  2. Bisakah GDB mengubah kode rakitan dari program yang sedang berjalan?

  3. Bisakah sebuah program mengatakan sedang dijalankan di bawah sudo?