2016-03-08 6 views
21

मैंने क्या गलत किया है (या नहीं किया) gdb मेरे लिए ठीक से काम नहीं कर रहा है?चेतावनी: पता स्थान यादृच्छिकरण को अक्षम करने में त्रुटि: ऑपरेशन की अनुमति नहीं है

[email protected]:/# cat minimal.c 
int main() 
{ 
    int i = 1337; 
    return 0; 
} 
[email protected]:/# gcc -g minimal.c -o minimal 
[email protected]:/# gdb minimal 
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 
. 
. 
. 
Reading symbols from minimal...done. 
(gdb) break main 
Breakpoint 1 at 0x4004f1: file minimal.c, line 3. 
(gdb) run 
Starting program: /minimal 
warning: Error disabling address space randomization: Operation not permitted 
During startup program exited normally. 
(gdb) 
(gdb) print i 
No symbol "i" in current context. 
+28

जब एक डोकर कंटेनर के भीतर चल रहा है, मैं इस त्रुटि जब तक मैं added' मिला - सुरक्षा- 'docker run' पर seccomp = unconfined' का चयन करें। –

+0

@ कैमरूनटागार्ट टिप के लिए धन्यवाद! आपने मेरा दिन बना दिया। – gaijin

+0

@CameronTaggart यह मेरे लिए अच्छा काम करता है, लेकिन सुरक्षा समस्या coms – Jia

उत्तर

12

जो भी कारण के लिए, अपने उपयोगकर्ता खाते इस प्रक्रिया के लिए कर्नेल के पता स्थान लेआउट randomisation निष्क्रिय करने के लिए अनुमति नहीं है। डिफ़ॉल्ट रूप से, जीडीबी इसे बंद कर देता है क्योंकि यह कुछ प्रकार के डिबगिंग को आसान बनाता है (विशेष रूप से, इसका मतलब यह है कि प्रत्येक बार जब आप अपना प्रोग्राम चलाते हैं तो स्टैक ऑब्जेक्ट्स का पता समान होगा)। here और पढ़ें।

आप set disable-randomization off के साथ gdb की इस सुविधा को अक्षम करके इस समस्या को हल कर सकते हैं।

एएसएलआर को अक्षम करने के लिए आपके उपयोगकर्ता को अनुमति की आवश्यकता होने के कारण, यह शायद /proc/sys/kernel/randomize_va_space पर लिखने की अनुमति देने के लिए उबलता है। here और पढ़ें।

14

आप डोकर उपयोग कर रहे हैं, तो आप शायद --security-opt seccomp=unconfined विकल्प (और साथ ही सक्षम करने ptrace) की जरूरत है:

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined 
संबंधित मुद्दे

 संबंधित मुद्दे