यूनिक्स में क्या छीन और नहीं-छीनने वाले निष्पादन योग्य हैं?


37

से आदमी फ़ाइल ,

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

निष्पादन योग्य स्ट्रिपिंग का क्या अर्थ है?

कुछ निष्पादन योग्य व्यक्ति क्यों छीन लिए गए जबकि अन्य नहीं हैं?

जवाबों:


50

यदि आप gcc -g ध्वज के साथ निष्पादन योग्य संकलित करते हैं, तो इसमें डीबगिंग जानकारी है। इसका मतलब है कि प्रत्येक निर्देश के लिए सूचना है कि स्रोत कोड की किस पंक्ति ने इसे उत्पन्न किया है, स्रोत कोड में चर का नाम बरकरार रखा गया है और रनटाइम पर मिलान मेमोरी से जुड़ा जा सकता है आदि स्ट्रिप इस डिबगिंग जानकारी को हटा सकते हैं और इसमें शामिल अन्य डेटा शामिल हैं निष्पादन योग्य में जो निष्पादन के आकार को कम करने के लिए निष्पादन के लिए आवश्यक नहीं है।


10
पट्टी (1) मैनपेज भी देखें । आम तौर पर पट्टी सभी प्रतीकों को हटा देती है क्योंकि वे सख्ती से आवश्यक नहीं हैं; यह जानकारी भी डिबगिंग निकालता है, लेकिन प्रतीकों बड़ी बात कर रहे हैं
माइकल Mrozek

3
अवधारणा अधिकांश निष्पादन योग्य स्वरूपों का सामान्यीकरण करती है, यह gix या unix के लिए भी विशिष्ट नहीं है।
गिल्स का SO- 21

4
मेरे पास एक 40MB निष्पादन योग्य था, जब छीनने को 6MB तक कम कर दिया गया था - बस इसलिए आपको उस तरह के स्थान का एक विचार मिलता है जिसमें डेटा डीबग करना शुरू होता है।
नाथन उस्मान

तो, एक निष्पादन योग्य है prog.eकि gcc -g -o prog.e prog.cआप के साथ संकलन के बराबर हो गया था अलग करना gcc -O0 -o prog.e prog.c?
ysap 13

1
@ysap नहीं, इसका अनुकूलन (-ओ) से कोई लेना-देना नहीं है। असेंबली कोड वही रहता है कि फाइल छीनी जाए या नहीं। आपको डिबगिंग जानकारी के बिना एक निष्पादन योग्य मिलता है (इसलिए आप "-जी" के नुकसान के बारे में सही हैं) और सभी प्रतीकों के बिना (यानी, फ़ंक्शन नाम, वैश्विक चर नाम ...)। यह "gcc -s -o prog.e prog.c" के बराबर है। जब किसी प्रोग्राम को निष्पादित किया जाता है, तो प्रतीकों को कोई फर्क नहीं पड़ता है। लेकिन उदाहरण के लिए मालिकाना सॉफ्टवेयर में हमेशा प्रतीकों को छीन लिया जाता है क्योंकि अन्यथा हर कोई कार्यों और उनके स्थानों के मूल नाम जान सकता है।
पिकरस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.