2013-10-06 11 views
12

मैं gdb के साथ एक कार्यक्रम संलग्न करने के लिए कोशिश कर रहा हूँ, लेकिन यह मुझे देता है:gdb ptrace कार्रवाई की अनुमति नहीं

कार्रवाई करने के लिए 29139 प्रक्रिया के लिए अटैच नहीं कर सके अटैच किया जा रहा। अपने uid लक्ष्य प्रक्रिया के uid मेल खाता है,/proc/sys/कर्नेल/यम/ptrace_scope की सेटिंग की जाँच करें, या रूट उपयोगकर्ता के रूप में फिर से प्रयास करें। अधिक जानकारी के लिए, /etc/sysctl.d/10-ptrace.conf ptrace देखें: ऑपरेशन की अनुमति नहीं है।

edb-debugger रिटर्न "प्रक्रिया में संलग्न करने में विफल, कृपया विशेषाधिकारों की जांच करें और पुनः प्रयास करें।"

strace रिटर्न "देते हैं: ptrace (PTRACE_ATTACH, ...): कार्रवाई की अनुमति नहीं"

मैं 0 करने के लिए "kernel.yama.ptrace_scope" 1 बदल गया है और "/ proc/sys/कर्नेल/यम/ptrace_scope "1 0 करने के लिए और कोशिश की" = पर्यावरण LD_PRELOAD/ptrace.so "सेट इस के साथ:।

#include <stdio.h> 
int ptrace(int i, int j, int k, int l) 
{ 
    printf(" ptrace(%i, %i, %i, %i), returning -1\n", i, j, k, l); 
    return 0; 
} 

लेकिन यह अभी भी एक ही त्रुटि देता है। मैं इसे डिबगर्स से कैसे संलग्न कर सकता हूं?

उत्तर

0

मैं क्या आप LD_PRELOAD या अपने ptrace समारोह के साथ क्या कर रहे हैं पता नहीं है।

आप एक बहुत ही सरल कार्यक्रम के लिए gdb संलग्न क्यों की कोशिश क्यों नहीं करते? ऐसा प्रोग्राम बनाएं जो बार-बार हैलो या कुछ प्रिंट करता है और इसे संलग्न करने के लिए gdb -pid [हैलो प्रोग्राम पीआईडी] का उपयोग करता है।

यदि इससे काम नहीं है कि आप वास्तव में एक समस्या है।

एक और मुद्दा यह यूजर आईडी है। क्या वह कार्यक्रम है जिसे आप स्वयं को किसी अन्य यूआईडी में स्थापित कर रहे हैं? यदि ऐसा है तो आप इसे तब तक नहीं निकाल सकते जब तक कि आप एक ही उपयोगकर्ता आईडी का उपयोग नहीं कर रहे हों या रूट हैं।

+0

यह साधारण कार्यक्रम attachs लेकिन मैं कोशिश कर रहा हूँ एक क्रैकमे फ़ाइल संलग्न करें। इसमें एंटी-डिबग सुरक्षा है [इस तरह] (http://xorl.wordpress.com/2009/01/01/quick-anti-debugging-trick-for-gdb/)। – user2850750

+0

@ user2850750: मैंने उत्तर में एक और बिट जोड़ा। –

+0

मैं इसे रूट – user2850750

17

यह लिनक्स में कर्नेल सख्त होने के कारण है; आप भी देखें this article about it in Fedora 22 और this comment thread about Ubuntu और (प्रलेखन के लिंक के साथ) echo 0 > /proc/sys/kernel/yama/ptrace_scope द्वारा या /etc/sysctl.d/10-ptrace.conf

में इसे संशोधित करके इस व्यवहार को निष्क्रिय कर सकते हैं।

2

नहीं वास्तव में ऊपर यूज-केस को संबोधित कर रहे, लेकिन मैं इस समस्या थी:

समस्या: यह हुआ है कि मैं sudo के साथ अपने कार्यक्रम शुरू कर दिया है, इसलिए जब gdb की शुरूआत यह मेरे ptrace: Operation not permitted दे रहा था।

समाधान: sudo gdb ...

0

हो सकता है कि किसी को gdb के साथ इस प्रक्रिया को संलग्न किया है।

  • ps -ef | grep gdb

एक ही प्रक्रिया को दो बार संलग्न नहीं कर सकता है।

9

आप डोकर उपयोग कर रहे हैं, तो आप शायद इन विकल्पों की आवश्यकता होगी:

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

मैं एक ही समस्या का सामना करना पड़ा और समाधान का एक बहुत कोशिश लेकिन अंत में, मैं समाधान पाया है है, लेकिन वास्तव में मैं डॉन ' टी पता है कि समस्या क्या थी। सबसे पहले मैंने ptrace_conf मान को संशोधित किया और उबंटू में रूट के रूप में लॉगिन किया लेकिन समस्या अभी भी दिखाई देती है। लेकिन सबसे अजीब बात यह है कि क्या हुआ gdb है मुझे बताने वाला संदेश से पता चला है:

Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user.
For more details, see /etc/sysctl.d/10-ptrace.conf warning: process 3767 is already traced by process 3755 ptrace: Operation not permitted.

ps कमांड टर्मिनल के साथ, प्रक्रिया 3755 में सूचीबद्ध नहीं किया गया था।

मुझे प्रक्रिया 3755/proc/$ pid में मिला लेकिन मुझे समझ में नहीं आया कि यह क्या था !!

अंत में, मैंने लक्ष्य फ़ाइल (foo.c) को हटा दिया है, जिसे मैं इसे PTRACE_ATTACH syscall का उपयोग करके gdb और tracer c प्रोग्राम को संलग्न करने का प्रयास करता हूं, और दूसरे फ़ोल्डर में, मैंने एक और सी प्रोग्राम बनाया और इसे संकलित किया।

समस्या हल हो गई है और मैं या तो gdb या ptrace_attach syscall द्वारा किसी अन्य प्रक्रिया से अटैच करने में सक्षम था।

(gdb) attach 4416

Attaching to process 4416

और मैं मैं दोनों gdb और ptrace साथ यह परीक्षण किया 4416. पर कार्रवाई करने के संकेत का एक बहुत भेजने के लिए, उन दोनों को सही ढंग से चलाने के लिए।

वास्तव में मैं इस समस्या पता नहीं क्या था, लेकिन मुझे लगता है कि उबंटू में एक बग के रूप में साइटों का एक बहुत यह करने के लिए भेजा है नहीं है, इस तरह के https://askubuntu.com/questions/143561/why-wont-strace-gdb-attach-to-a-process-even-though-im-root

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