macOS Sierra GDB non codificato

3

Per prima cosa dovrei notare che sto usando macOS Sierra (versione 10.12 beta 16A238m), ma non penso che sia diverso da El Capitan in questa determinata situazione (ma suppongo che tu sappia più di quello che faccio a riguardo, oppure non sarei qui adesso a fare questa domanda)

Così ho installato GDB (The GNU Debugger) per seguire un libro che sto leggendo ("Hacking: The Art of Exploitation"), che spiega solo come usare GDB, quindi non posso usare LLDB. L'ho installato usando Homebrew ( brew install gdb ), e tutto ha funzionato bene. Fino a quando l'ho usato. Ho compilato il mio codice sorgente C utilizzando clang -g hello_word.c -o hello_world (è solo un semplice programma C "Hello, World!"), Quindi eseguo gdb -q hello_world , ed ecco la sessione:

Chens-MacBook-Pro:C chenjian$ gdb -q hello_world
Reading symbols from hello_world...Reading symbols from /Users/chenjian/Documents/Coding/Projects/RandomDev/C/hello_world.dSYM/Contents/Resources/DWARF/hello_world...done.
done.
(gdb) list
1   #include <stdio.h>
2   
3   int main() {
4       printf("Hello, World!\n");
5   }
(gdb) break main
Breakpoint 1 at 0x100000f6f: file hello_world.c, line 4.
(gdb) run
Starting program: /Users/chenjian/Documents/Coding/Projects/RandomDev/C/hello_world 
Unable to find Mach task port for process-id 42492: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

Quindi ho cercato su Google un po 'di codesign e ho trovato questo . Così ho seguito le istruzioni (eccetto quelle per Snow Leopard), e ancora non funziona! Qualcuno sa come posso farlo funzionare?

    
posta Hexa 16.07.2016 - 20:23
fonte

2 risposte

1

Sì, la firma del codice dovrebbe funzionare è un'alternativa sostanzialmente migliore alla disabilitazione di SIP. Non posso davvero credere a quanto spesso la disabilitazione di SIP sia suggerita come soluzione a questo problema - se sei disperato, consiglierei di eseguire sudo gdb (avere dei backup!) Che disabilitare SIP.

Per me, il problema era che ho ripetutamente incasinato uno o più passaggi della procedura. Ho finito per fare brew reinstall gdb , cancellando tutti i certificati che avevo creato, riavviando e seguendo molto attentamente la procedura. Nota che quando installi gdb con Homebrew, viene mostrato quanto segue:

==> Caveats
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  https://sourceware.org/gdb/wiki/BuildingOnDarwin

On 10.12 (Sierra) or later with SIP, you need to run this:

  echo "set startup-with-shell off" >> ~/.gdbinit

Quelle istruzioni erano ciò che funzionava per me su Sierra. La disattivazione di startup-with-shell finora non è stata necessaria, ma vale la pena di tener presente se sei sicuro di aver fatto tutto correttamente e la sezione di risoluzione dei problemi del collegamento non è di alcuna utilità.

    
risposta data 15.11.2016 - 16:12
fonte
0
  1. Avvia al ripristino
  2. Apri terminale
  3. digita csrutil disable

Quindi riavvia. dtrace e gdb dovrebbero funzionare.

link

Puoi anche eseguire uno script per determinare quali parti del SIP sono abilitate se lo abiliti con le esclusioni:

Una cosa bella è che non hai bisogno di rilassare SIP se scegli di usare lldb e puoi compilare il tuo codice con Xcode. Poiché gdb non è firmato da Apple, è intenzionalmente impedito di collegarsi a qualsiasi cosa sul sistema in base alla progettazione.

    
risposta data 24.07.2016 - 00:11
fonte

Leggi altre domande sui tag