परीक्षण उबंटू 12.04 64-बिट पर है। x86 वास्तुकला।पीआईई, पीआईसी कोड और 64-बिट x86 प्लेटफॉर्म पर निष्पादन योग्य तुलना में अंतर क्या हैं?
मैं अवधारणा स्थिति स्वतंत्र निष्पादन योग्य (पीआईई) और स्थिति स्वतंत्र कोड (पीआईसी) की अवधारणा के बारे में उलझन में हूं, और मुझे लगता है कि वे ऑर्थोगोनल नहीं हैं।
मेरा त्वरित प्रयोग यहां है।
gcc -fPIC -pie quickSort.c -o a_pie.out
gcc -fPIC quickSort.c -o a_pic.out
gcc a.out
objdump -Dr -j .text a.out > a1.temp
objdump -Dr -j .text a_pic.out > a2.temp
objdump -Dr -j .text a_pie.out > a3.temp
और मेरे पास निम्नलिखित निष्कर्ष हैं।
ए a.out कुछ पीआईसी कोड शामिल है, लेकिन केवल libc प्रस्तावना और उपसंहार कार्यों में तैयार नहीं है, के रूप में नीचे में दिखाया गया है:
4004d0: 48 83 3d 70 09 20 00 cmpq $0x0,0x200970(%rip) # 600e48 <__JCR_END__>
मेरी सरल quicksort कार्यक्रम के विधानसभा निर्देश में , मुझे कोई भी पीआईसी निर्देश नहीं मिला।
बी a_pic.out पीआईसी कोड होता है, और मैं किसी भी गैर पीआईसी निर्देश ... मेरी quicksort कार्यक्रम के निर्देश में नहीं मिला, सभी वैश्विक डेटा इस तरह पीआईसी निर्देश द्वारा पहुँचा रहे हैं :
40053b: 48 8d 05 ea 02 00 00 lea 0x2ea(%rip),%rax # 40082c <_IO_stdin_used+0x4>
सी a_pie.out a_pic.out के साथ तुलना वाक्य रचना-समान निर्देश शामिल हैं। हालांकि, a_pie.out के के स्मृति पते .text अनुभाग 0x630 से 0xa57 तक है, जबकि a_pic.out का एक ही भाग 0x400410 से 0x400817 तक है।
क्या कोई मुझे इन घटनाओं के बारे में कुछ स्पष्टीकरण दे सकता है? विशेष रूप से खोज सी। फिर से, मैं पाई बनाम पीआईसी के बारे में वास्तव में उलझन में हूँ, और पता नहीं कैसे खोजने सी समझाना पड़ेगा ..
असल में 'पीआईई' एक्जिक्यूटिव के लिए लक्षित है और साझा पुस्तकालयों के लिए 'पीआईसी' है। यह 'पीआईसी' निष्पादन योग्य जांचने के लिए ज्यादा समझ में नहीं आता है। यह भी ध्यान रखें कि 'gcc' तदनुसार लिंकर को आमंत्रित करता है। – Jester