Menyahpepijat Fail Teras Merentasi Pengedaran Linux Berbeza
Apabila fail teras dijana pada pengedaran Linux berbeza daripada persekitaran pembangunan anda, surih tindanan mungkin tidak bermakna sepenuhnya. Boleh laku yang dipautkan secara dinamik bergantung pada alamat dalam perpustakaan kongsi, dan alamat ini boleh berbeza-beza antara pengedaran. GDB mungkin tersilap mengaitkan ranap sistem kepada fungsi dalam salinan pustaka anda, manakala sistem pelanggan mungkin mempunyai fungsi yang berbeza pada alamat yang sama.
Untuk mengesahkan ketepatan surih tindanan, membuka fungsi yang berkenaan mungkin mendedahkan bahawa alamat termasuk dalam arahan atau didahului oleh arahan bukan PANGGILAN. Dalam kes sedemikian, surih tindanan tidak boleh dipercayai.
Untuk mendapatkan surih yang lebih tepat, anda boleh meminta pelanggan menyediakan perpustakaan berikut yang digunakan oleh binari bermasalah:
cd / tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...
Pada anda sistem:
mkdir /tmp/from-customer tar xzf to-you.tar.gz -C /tmp/from-customer gdb /path/to/binary (gdb) set solib-absolute-prefix /tmp/from-customer (gdb) core core # Important: Set solib-... before loading core (gdb) where # Get meaningful stack trace!
Nyahpepijat dengan Dioptimumkan Perduaan
Daripada menasihati pelanggan untuk menjalankan perduaan -g, pendekatan pilihan ialah membina perduaan dengan kedua-dua bendera pengoptimuman -g dan -O2 dan menanggalkan maklumat nyahpepijat sebelum pengedaran:
build with -g -O2 -o myexe.dbg strip -g myexe.dbg -o myexe distribute myexe to customers when a customer gets a core, use myexe.dbg to debug it
Ini membolehkan penyahpepijatan simbolik penuh (fail/baris, pembolehubah setempat) tanpa berkongsi butiran kod sumber yang sensitif.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Nyahpepijat Fail Teras Dijana pada Pengedaran Linux Berbeza dengan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!