पर्यावरण चर का पता बदल रहा है?


3

यह मत पूछो कि मैं स्टैक में यह पोस्ट क्यों नहीं कर रहा हूं। इसलिए मेरा यह छोटा सी कार्यक्रम है। यह 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

1
यह ASLR से संबंधित हो सकता है, जिसके कारण हर नई प्रक्रिया में उनके स्टैक के लिए अलग-अलग स्थान होते हैं।
१५'१३

@ विकिपीडिया के अनुसार: लिनक्स ने कर्नेल संस्करण 2.6.12 (जून 2005 को रिलीज़) के बाद से डिफ़ॉल्ट रूप से एएसएलआर के कमजोर रूप को सक्षम किया है।
विकीविट्ज

करीबी मतदाताओं को संभावित करने के लिए: यह कर्नेल के व्यवहार के बारे में एक प्रश्न है। C कोड का उपयोग केवल "लक्षणों" को दर्शाने के लिए किया जाता है। मुझे लगता है कि यह पूरी तरह से यहाँ विषय पर है।
डेनिस

यह आपके वांछित env वेरिएबल को खोजने और इसके लिए एक पता वापस करने में सक्षम था ... यह टिन पर वर्णित के समान ही काम करता है ... समान पते की अपेक्षा करना एक विषम अवधारणा है। यदि आप env var जोड़ते या हटाते हैं, तो पता बदल जाता है, ASLR कुछ समय के लिए भी रहा है। क्या अजीब होगा आपको पता नहीं मिल रहा है। यह सभी समान है, भले ही डेटा संग्रहीत हो। (और नीचे सभी तरह से कछुए!)
lornix

जवाबों:


2

लिनक्स कर्नेल में एक सुविधा होती है जो सुरक्षा के लिए मेमोरी एड्रेस रेंडमाइजेशन करती है। इसका उद्देश्य विश्वसनीय बफर अतिप्रवाह हमलों को रोकना है। संभवतः आपने एक बॉक्स पर सक्षम किया है, लेकिन दूसरे पर नहीं। सक्षम और इसे अक्षम करने के लिए sysctl की जाँच करें।


1
echo 0 > /proc/sys/kernel/randomize_va_spaceASLR को अक्षम करने के लिए समस्या ।
जिंगुगो याओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.