एक प्रोग्राम के रूप में सी प्रोग्राम कैसे काम करते हैं और एक प्रोग्राम के लिए libc का उपयोग करने में सक्षम होने के लिए न्यूनतम स्तर की सामग्री मौजूद होनी चाहिए, मैंने मुख्य रूप से गैस और एलडी का उपयोग कर x86 असेंबली में प्रोग्राम करने का प्रयास करने के लिए इसे स्वयं लिया है। ।जीसीसी का उपयोग किये बिना एलडी के साथ सी मानक लाइब्रेरी का उपयोग करने वाले गैस असेंबली प्रोग्राम को कैसे लिंक करें?
एक मजेदार छोटी चुनौती के रूप में, मैंने सफलतापूर्वक इकट्ठा किया है और विभिन्न स्वयं निर्मित गतिशील पुस्तकालयों से जुड़े कई कार्यक्रमों को जोड़ा है, लेकिन मैं सीधे जीसीसी का उपयोग किए बिना libc फ़ंक्शन कॉल का उपयोग करने के लिए स्क्रैच से प्रोग्राम को कोड करने में सक्षम नहीं रहा ।
मैं व्यक्तिगत सी लाइब्रेरी फ़ंक्शंस के कॉलिंग सम्मेलनों को समझता हूं, और ओबीजेडम्प और रीडल्फ के उपयोग के माध्यम से जीसीसी से संकलित कार्यक्रमों का पूरी तरह से निरीक्षण किया गया है, लेकिन जहां तक गैस असेंबली फ़ाइल में शामिल करने के लिए कहीं भी जानकारी प्राप्त नहीं हुई है, libc में सफलतापूर्वक लिंक करने के लिए ld में कौन से पैरामीटर का आह्वान करना है। किसी के पास इसका कोई अंतर्दृष्टि है?
मैं x86 मशीन पर लिनक्स चला रहा हूं।
बहुत उपयोगी है, जो बहुत सारी जानकारी को स्पष्ट करता है। मेरे कोड पर लागू करने पर, मुझे 2 त्रुटियां मिल रही हैं, "__libc_csu_fini '" और "अपरिभाषित संदर्भ" __libc_csu_init' " सभी ऑब्जेक्ट फ़ाइलों पर प्रतीक डंप करने के बाद, मैं उनको ढूंढने में विफल रहा प्रतीकों, और crt1.o प्रतीकों को बुलाता प्रतीत होता है। क्या ऐसी कोई चीज है जो संभवतः उन प्रतीकों को अपनी ऑब्जेक्ट फ़ाइल के अंदर रख सकती है? – Cyro
वे सी पुस्तकालय के एक साझा हिस्से से आते हैं; '-lc' से लिंक करना'/usr/lib/libc.so' में खींचना चाहिए, जो वास्तव में एक लिंकर स्क्रिप्ट खंड है जो सही फ़ाइल ('/ usr/lib/libc_nonshared.a') का संदर्भ देता है। शायद लिंक आदेश के साथ एक समस्या है? मुझे पूरा यकीन है कि आप 'crt1.o' के बाद पहले 'crti.o'', फिर अपनी ऑब्जेक्ट्स और लाइब्रेरीज़, फिर अंत में 'crtn.o'' चाहते हैं - लेकिन हो सकता है कि आपकी ऑब्जेक्ट के बाद '-lc' आना चाहिए (बस 'crtn.o' से पहले), पहले नहीं। –
मैं आगे बढ़ गया और /usr/lib/libc_nonshared.a के साथ बस -lc टाइप करने के बाद और पूरी चीज काम करने के बाद बस! बहुत - बहुत धन्यवाद! – Cyro