Chciałbym móc pisać i debugować zestaw x64 na moim Macu z Sierra 10.12.4. Można by pomyśleć, że nie byłoby to szczególnie trudne lub niejasne pragnienie, ale pomimo wielu godzin wysiłku i wielu poszukiwań w Internecie, nie udało mi się i nie znalazłem nikogo innego, kto je posiada.Czy można debugować zestaw x64 w systemie Mac OS?
Wolałbym używać asemblera NASM, ale jeśli będę musiał, użyję GAS lub cokolwiek ze składnią Intela. (Nawiasem mówiąc, należy pamiętać, że zarówno gdb i lldb praca grzywny z plików C skompilowane z gcc.)
Oto moja sytuacja i czego próbowałem:
NASM nie działa
Mogę złożyć i połączyć plik i sprawdzić, czy działa.
$ nasm -f macho64 -g -F dwarf hello2.s -o hello2.o
$ gcc hello2.o -o hello2
$ ./hello2
Hello, world!
Ale nie mogę go debugować z gdb (Zauważ, że zrobiła wszystko codeSigning niezbędne nonsens):
$ gdb hello2
GNU gdb (GDB) 8.0
<snip>
Reading symbols from hello2...done.
(gdb) list
1 section .data
2
3 msg: db "Hello, world!", 0
4
5 section .text
6 global _main
7 extern _puts
8
9 _main:
10 push rbp
(gdb) break 10
Breakpoint 1 at 0x0: file hello2.s, line 10.
(gdb) run
Starting program: /Users/mike/GoogleDrive/Projects/Sort/hello2
[New Thread 0x1403 of process 38022]
warning: unhandled dyld version (15)
Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x0
Command aborted.
I nie można debugować go lldb:
$ lldb hello2
(lldb) target create "hello2"
Current executable set to 'hello2' (x86_64).
(lldb) b hello2.s:10
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
GAS nie działa
mogę zmontować, link, i uruchom:
$ gcc -g hello.s -o hello
$ ./hello
Hello, world!
Ale nie mogę debugować z gdb:
$ gdb hello
GNU gdb (GDB) 8.0
<snip>
Reading symbols from hello...Reading symbols from /Users/mike/GoogleDrive/Projects/Sort/hello.dSYM/Contents/Resources/DWARF/hello...done.
done.
(gdb) list
1 .intel_syntax
2 .text
3 .globl _main
4
5 _main:
6 push rbp
7 mov rbp, rsp
8 lea rdi, [rip + _main.S_0]
9 call _puts
10 mov rax, 0
(gdb) break 6
No line 6 in the current file.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (6) pending.
(gdb) run
Starting program: /Users/mike/GoogleDrive/Projects/Sort/hello
[New Thread 0x1403 of process 38063]
warning: unhandled dyld version (15)
Hello, world!
[Inferior 1 (process 38063) exited normally]
(. Więc po prostu zabrakło i zignorował przerwania)
I nie można debugować go lldb:
$ lldb hello
(lldb) target create "hello"
Current executable set to 'hello' (x86_64).
(lldb) b hello.s:6
Breakpoint 1: no locations (pending).
WARNING: Unable to resolve breakpoint to any actual locations.
Rzeczy, które znalazłem online
Here to blog o numerze gdb
nie działający w nowych wersjach systemu Mac OS.
Istnieje kilka starych powiązanych pytań dotyczących StackOverflow, z których żadne nie stanowią odpowiedniej odpowiedzi.
Istnieje również this way to use Xcode, który cudownie wydaje się działać ... ale tak naprawdę nie robi tego, co chcę. Debugger faktycznie nie jest świadomy mojego pliku źródłowego; chodzi tylko o przejrzenie instrukcji i wyświetlenie zdemontowanego kodu lub czegoś podobnego. Również nie chcę używać XCode.
Zapytałem o to na liście mailingowej NASM kilka miesięcy temu i nikt nigdy nie odpowiedział.
Więc ...
Więc jest to obecnie niemożliwe do zrobienia jedną z najbardziej podstawowych rzeczy osoba może chcą zrobić z komputerem przy użyciu komputera Mac?
Jeśli ktoś ma sposób, aby to zrobić, pokaż mi dokładnie niezbędne polecenia.
Jaką wersję 'nasm'? Jaka wersja 'gdb',' llvm'? –
Próbowałem już wersje nasm 2.13.01 i 2.14rc0 oraz wersje gdb 7.12.1 i 8.0. lldb-370,0.42. Apple llvm wersja 8.1.0. Otrzymuję te same wyniki niezależnie od wersji. Czy sugerujesz, że masz debugowanie, aby pracować z jakąś wersją tego oprogramowania? –
Mam na myśli informację o wydaniu nasm 2.13: "Format obiektu macho obsługuje teraz format debugowania karłów, zgodnie z nowszymi wersjami narzędzi." ale wskazałeś, że jesteś na bieżąco. Czy zapytałeś na forum Nasm? –