आप यूनिक्स exec
से पहले इस स्रोत से सी स्रोत से प्रोग्रामेटिक रूप से भी कर सकते हैं।
आप setarch के लिए सूत्रों का कहना है (यहाँ है एक स्रोत) पर एक नज़र डालें, तो:
http://code.metager.de/source/xref/linux/utils/util-linux/sys-utils/setarch.c
अगर एक सिस्टम कॉल (syscall
) या एक समारोह कॉल करने पर निर्भर करता आप देख सकते हैं (पर निर्भर करता है क्या आपका सिस्टम परिभाषित करता है)। setarch.c से:
#ifndef HAVE_PERSONALITY
# include <syscall.h>
# define personality(pers) ((long)syscall(SYS_personality, pers))
#endif
मेरे CentOS 6 64-बिट सिस्टम पर, यह है कि यह एक समारोह (जो शायद ऊपर स्वयं ही syscall कॉल) का उपयोग करता है की तरह लग रहा है। (के रूप में setarch स्रोत कोड में <sys/personality.h>
के रूप में संदर्भित) /usr/include/sys/personality.h
में शामिल फ़ाइल से इस स्निपेट पर एक नज़र डालें:
/* Set different ABIs (personalities). */
extern int personality (unsigned long int __persona) __THROW;
क्या यह करने पर निर्भर करता है, तो आप कर सकते हैं वह यह है कि, सी कोड से, फोन और सेट व्यक्तित्व ADDR_NO_RANDOMIZE और फिर exec
का उपयोग करने के लिए (जैसे setarch
करता है)। (: जब तक हो सकता है गतिशील लोड हो रहा है मुस्कराहट), तो यह केवल कांटे और अधिकारियों बाद में प्रभावित करता
#include <sys/personality.com>
#ifndef HAVE_PERSONALITY
# include <syscall.h>
# define personality(pers) ((long)syscall(SYS_personality, pers))
#endif
...
void mycode()
{
// If requested, turn off the address rand feature right before execing
if (MyGlobalVar_Turn_Address_Randomization_Off) {
personality(ADDR_NO_RANDOMIZE);
}
execvp(argv[0], argv); // ... from set-arch.
}
यह बहुत स्पष्ट आप इस प्रक्रिया में हो में पता यादृच्छिकीकरण बंद नहीं कर सकते है। मेरा मानना है कि पता यादृच्छिकता झंडे बच्चे उप-प्रक्रियाओं द्वारा विरासत में हैं?
वैसे भी, इस तरह आप सी स्रोत कोड में पता यादृच्छिकरण को प्रोग्रामेटिक रूप से बंद कर सकते हैं। यह आपका एकमात्र समाधान हो सकता है यदि आप नहीं चाहते कि कोई उपयोगकर्ता मैन्युअल रूप से हस्तक्षेप करे और स्टार्च के साथ स्टार्ट-अप या पहले सूचीबद्ध अन्य समाधानों में से एक हो।
इससे पहले कि आप इसे बंद करने में सुरक्षा समस्याओं के बारे में शिकायत करें, कुछ साझा स्मृति पुस्तकालय/उपकरण (जैसे PickingTools shared memory और कुछ IBM databases) स्मृति पते के यादृच्छिकरण को बंद करने में सक्षम होने की आवश्यकता है।
क्या ओएस ...... ...... – Orbit
संबंधित http://stackoverflow.com/questions/11238457/disable-and-re-enable-address-space-layout-randomization-only-for-myself –