c - चेतावनी: पता स्थान यादृच्छिकरण अक्षम करने में त्रुटि: ऑपरेशन की अनुमति नहीं है




docker gdb (2)

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

आप gdb के इस फीचर को set disable-randomization off साथ अक्षम करके इस समस्या के आसपास काम कर सकते हैं।

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

मैंने क्या गलत किया है (या नहीं किया) कि 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.

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

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined