macOS Sierra GDB nicht mitentwickelt

Zunächst sollte ich anmerken, dass ich macOS Sierra (Version 10.12 Beta 16A238m) verwende, aber ich glaube nicht, dass es sich in dieser bestimmten Situation so sehr von El Capitan unterscheidet (aber ich denke, Sie wissen mehr darüber als ich, oder ich würde es tun bin gerade nicht hier und stelle diese Frage).

Also habe ich GDB (The GNU Debugger) installiert, um einem Buch zu folgen, das ich gerade lese ("Hacking: The Art of Exploitation"), das nur erklärt, wie man GDB verwendet, also kann ich LLDB nicht verwenden. Ich habe es mit Homebrew ( brew install gdb) installiert und alles hat gut funktioniert. Bis ich es benutzt habe. Ich habe meinen C-Quellcode mit kompiliert clang -g hello_word.c -o hello_world(es ist nur ein einfaches C-Programm „Hello, World!“), und dann führe ich aus gdb -q hello_world, und hier ist die Sitzung:

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))

Also habe ich ein bisschen über Codesigning gegoogelt und das hier gefunden . Also bin ich die Anweisungen durchgegangen (mit Ausnahme der für Snow Leopard), und es funktioniert immer noch nicht! Weiß jemand, wie ich es zum Laufen bringen kann?

Möchten Sie eine Antwort, die Sie durch die Deaktivierung von SIP führt, wodurch dtrace, Debugging und einige andere Dinge, die Entwickler benötigen, beendet werden?
Gibt es einen anderen, weniger destruktiven Weg?
@bmike ähm der obige Kommentar ist für dich
Nein - (oder AFAIK) Sie müssen einige oder alle SIP ausschalten, um das zu erreichen, was Sie verlangen.
@bmike Wie mache ich das? Und wofür steht SIP? (Ich bin neugierig) Ich denke, Sie sollten einfach Ihrem ursprünglichen Plan folgen und eine Antwort posten, die mich durchführt und SIP erklärt
Außerdem - Sehen Sie sich veertu im Mac App Store an. Sie könnten in einer Ubuntu-VM viel schneller einsatzbereit sein. Die Chancen stehen gut, dass eine kostenlose VM näher an der Einrichtung liegt, die das Buch annimmt.

Antworten (2)

Ja, Code Signing sollte funktionieren, ist eine wesentlich bessere Alternative zum Deaktivieren von SIP. Ich kann nicht wirklich glauben, wie oft das Deaktivieren von SIP als Lösung für dieses Problem vorgeschlagen wird - wenn Sie verzweifelt sind, würde ich eher raten, zu laufen sudo gdb(Backups zu haben!), Als SIP zu deaktivieren.

Für mich war das Problem, dass ich immer wieder einen oder mehrere Schritte in der Prozedur durcheinander gebracht habe. Am Ende habe ich getan brew reinstall gdb, alle von mir erstellten Zertifikate gelöscht, neu gestartet und dann das Verfahren erneut sehr sorgfältig befolgt. Beachten Sie, dass bei der Installation von gdb mit Homebrew Folgendes angezeigt wird:

==> 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

Diese Anweisungen haben bei Sierra für mich funktioniert. Das Deaktivieren startup-with-shellwar bisher nicht erforderlich, aber es lohnt sich, daran zu denken, wenn Sie sicher sind, dass Sie alles richtig gemacht haben und der Abschnitt zur Fehlerbehebung des Links nutzlos ist.

  1. Starten Sie zur Wiederherstellung
  2. Terminal öffnen
  3. Typcsrutil disable

Dann neu starten. dtraceund gdbsollte funktionieren.

https://developer.apple.com/library/mac/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html

Sie können auch ein Skript ausführen, um festzustellen, welche Teile von SIP aktiviert sind, wenn Sie es mit Ausschlüssen aktivieren:

Eine nette Sache ist, dass Sie SIP nicht lockern müssen, wenn Sie lldb verwenden und Ihren Code mit Xcode kompilieren können. Da gdbes nicht von Apple signiert ist, wird es absichtlich daran gehindert, irgendetwas auf dem System anzuhängen.

Danke! Aber was genau ist Systemintegritätsschutz?
@Hexa Möglicherweise müssen Sie die Einführung zum ersten Link in meiner Antwort lesen. Es erklärt SIP auf allgemeiner Ebene. Ich dachte, Sie würden SystemIntegrityProtection sehen und wissen, dass das SIP ist - entschuldigen Sie, dass Sie das nicht aussprechen.
Nein, ich habe verstanden, dass System Integrity Protection SIP ist, sie erklären es nur nicht wirklich gut in dem Link ... obwohl Sie vielleicht einen tieferen Einblick in das geben können, was es ist
Ich habe mehrere Stunden gebraucht, um den Abschnitt des Handbuchs zu verdauen, und ich benutze UNIX seit Jahrzehnten. Möglicherweise müssen Sie es ein wenig studieren, bevor Sie es bekommen.
Es ist also an der Zeit, mein Buch "Linux Kernel Development" zu lesen ...
Oder zumindest die Voraussetzungen der SIP-Dokumentation - developer.apple.com/library/mac/documentation/Security/…
Es ist nicht notwendig, SIP zu deaktivieren, nur um gdb oder dtrace auszuführen. Sehen Sie sich die gdb-Dokumentation an , die das zweite oder dritte Google-Ergebnis für die Fehlermeldung ist.
@Isaiah - dtraceist immer noch streng, fast vollständig kastriert iosnoopund execsnoop -vmuss. Sie haben Recht, dass eine begrenzte Nutzung jetzt möglich ist. In ähnlicher Weise kann gdb mit Xcode 8 einige weitere Dinge tun. Wenn Sie meine Antwort in einem Postscript bearbeiten möchten, in dem erklärt wird, was sonst noch getan werden kann, können Sie dies gerne tun.
Ich habe das gleiche Problem und ich deaktiviere das SIP. Jetzt gibt mir gdb Folgendes:warning: unhandled dyld version (15) [Inferior 1 (process 660) exited normally]