यह मत पूछो कि मैं स्टैक में यह पोस्ट क्यों नहीं कर रहा हूं। इसलिए मेरा यह छोटा सी कार्यक्रम है। यह argv [1] में निर्दिष्ट पर्यावरण चर का पता देता है।
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
printf("%s is at %p\n", argv[1], getenv(argv[1]));
}
परेशान करने वाली बात यह है कि उबंटू लिनक्स 2.6.20-15 x86 पर यह प्रोग्राम चलने पर हर बार एक ही पता देता है।
हालाँकि उबंटू लिनक्स 3.2.0-37 x86 पर यह हर बार एक अलग पता देता है। तो नए कर्नेल के साथ नया क्या है?
आप महत्वपूर्ण विवरण छोड़ रहे हैं। आपका क्या मतलब है "अलग पता"? उदाहरण?
—
इसहाक रैबिनोविच 23
यह ASLR से संबंधित हो सकता है, जिसके कारण हर नई प्रक्रिया में उनके स्टैक के लिए अलग-अलग स्थान होते हैं।
—
१५'१३
@ विकिपीडिया के अनुसार: लिनक्स ने कर्नेल संस्करण 2.6.12 (जून 2005 को रिलीज़) के बाद से डिफ़ॉल्ट रूप से एएसएलआर के कमजोर रूप को सक्षम किया है।
—
विकीविट्ज
करीबी मतदाताओं को संभावित करने के लिए: यह कर्नेल के व्यवहार के बारे में एक प्रश्न है। C कोड का उपयोग केवल "लक्षणों" को दर्शाने के लिए किया जाता है। मुझे लगता है कि यह पूरी तरह से यहाँ विषय पर है।
—
डेनिस
यह आपके वांछित env वेरिएबल को खोजने और इसके लिए एक पता वापस करने में सक्षम था ... यह टिन पर वर्णित के समान ही काम करता है ... समान पते की अपेक्षा करना एक विषम अवधारणा है। यदि आप env var जोड़ते या हटाते हैं, तो पता बदल जाता है, ASLR कुछ समय के लिए भी रहा है। क्या अजीब होगा आपको पता नहीं मिल रहा है। यह सभी समान है, भले ही डेटा संग्रहीत हो। (और नीचे सभी तरह से कछुए!)
—
lornix