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?
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-shell
war 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.
csrutil disable
Dann neu starten. dtrace
und gdb
sollte funktionieren.
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 gdb
es nicht von Apple signiert ist, wird es absichtlich daran gehindert, irgendetwas auf dem System anzuhängen.
dtrace
ist immer noch streng, fast vollständig kastriert iosnoop
und execsnoop -v
muss. 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.warning: unhandled dyld version (15) [Inferior 1 (process 660) exited normally]
Fahrrad
Chen Jian
Chen Jian
Fahrrad
Chen Jian
Fahrrad