2013-10-06 22 views
12

sto cercando di collegare un programma con gdb ma mi torna:gdb non è permesso

Collegamento per elaborare 29139 Impossibile connettersi al processo. Se il tuo uid corrisponde al uid del processo target , controlla le impostazioni di/proc/sys/kernel/yama/ptrace_scope, oppure prova come utente root. Per ulteriori dettagli, vedere /etc/sysctl.d/10-ptrace.conf ptrace: Operazione non consentita.

restituzioni edb-debugger "Impossibile collegarsi al processo, verificare i privilegi e riprovare."

strace restituisce "attaccano: ptrace (PTRACE_ATTACH, ...): Operation not permitted"

ho cambiato "kernel.yama.ptrace_scope" 1 a 0 e "/ proc/sys/kernel/yama/ptrace_scope "1 a 0 e ha cercato "di ambiente LD_PRELOAD =/ptrace.so" impostato con questo:.

#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; 
} 

ma restituisce ancora lo stesso errore. come posso collegarlo ai debugger?

risposta

0

Non so cosa si sta facendo con LD_PRELOAD o la funzione ptrace.

Perché non provi ad allegare gdb a un programma molto semplice? Crea un programma che stampa semplicemente ripetutamente Hello o qualcosa del genere e usa gdb --pid [ciao programma PID] per collegarlo ad esso.

Se ciò non funziona, hai davvero un problema.

Un altro problema è l'ID utente. Il programma che stai tracciando si imposta su un altro UID? Se lo è, non puoi eseguire il ptrace a meno che tu non stia usando lo stesso ID utente o sia root.

+0

si attachs programmi semplici, ma sto cercando di allegare un file crackme. ha una protezione anti-debug [come questa] (http://xorl.wordpress.com/2009/01/01/quick-anti-debugging-trick-for-gdb/). – user2850750

+0

@ user2850750: ho aggiunto un altro bit alla risposta. –

+0

lo sto provando come root – user2850750

2

Non proprio affrontare il caso d'uso di cui sopra, ma ho avuto questo problema:

Problema: E 'successo che ho iniziato il mio programma con sudo, in modo che quando il lancio gdb mi stava dando ptrace: Operation not permitted.

Soluzione: sudo gdb ...

0

Forse qualcuno ha allegato questo processo con gdb.

  • ps -ef | grep gdb

Impossibile gdb collegare lo stesso processo due volte.

9

Se si utilizza Docker, probabilmente avrete bisogno di queste opzioni:

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

ho affrontato lo stesso problema e provare un sacco di soluzione, ma finalmente, ho trovato la soluzione, ma in realtà io don' so qual era il problema Per prima cosa ho modificato il valore di ptrace_conf e ho fatto il login su Ubuntu come root ma il problema appare ancora. Ma la cosa più strana che è accaduto è il gdb mi ha mostrato un messaggio che dice:

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.

Con terminale comando ps, il processo 3755 non è stato elencato.

Ho trovato il processo 3755 in/proc/$ pid ma non capisco cosa fosse !!

Infine, ho cancellato il file di destinazione (foo.c) che provo ad allegarlo vid gdb e traccer c programma usando il syscall PTRACE_ATTACH, e nell'altra cartella, ho creato un altro programma c e lo ho compilato.

il problema è risolto e sono stato abilitato a collegarsi a un altro processo tramite gdb o ptrace_attach syscall.

(gdb) attach 4416

Attaching to process 4416

e inviare un sacco di segnali per elaborare 4416. L'ho provato con entrambi gdb e ptrace, entrambi funzionare correttamente.

davvero non so cosa il problema è stato, ma penso che non è un bug in Ubuntu come un sacco di siti hanno fatto riferimento ad esso, come ad https://askubuntu.com/questions/143561/why-wont-strace-gdb-attach-to-a-process-even-though-im-root