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




docker gdb (3)

समझदारी के जवाब पर बिल्डिंग (धन्यवाद!), यहां डॉकटर कम्पोज़ के लिए समान सेटिंग्स हैं:

security_opt:
  - seccomp:unconfined
cap_add:
  - SYS_PTRACE

सुरक्षा विकल्प seccomp:unconfirmed ने address space randomization चेतावनियाँ तय कीं।

क्षमता SYS_PTRACE को ध्यान देने योग्य प्रभाव नहीं लगता, भले ही Docker प्रलेखन बताता है कि SYS_PTRACE एक ऐसी क्षमता है जो "डिफ़ॉल्ट रूप से स्वीकृत नहीं है"। शायद मैं नहीं जानता कि क्या देखना है।

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

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

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

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