Tôi muốn có thể viết và gỡ lỗi lắp ráp x64 trên máy Mac của tôi với Sierra 10.12.4. Người ta sẽ nghĩ rằng điều này sẽ không phải là một mong muốn đặc biệt khó khăn hoặc mơ hồ, nhưng mặc dù nhiều giờ nỗ lực và rất nhiều tìm kiếm trực tuyến tôi đã không thành công và tôi đã không tìm thấy bất cứ ai khác có một trong hai.Có thể gỡ lỗi lắp ráp x64 trên Mac OS không?
Tôi muốn sử dụng trình kết hợp NASM, nhưng sẽ sử dụng GAS hoặc bất kỳ thứ gì với cú pháp của Intel nếu tôi có. (Bằng cách này, lưu ý rằng cả gdb và LLĐB làm việc tốt với các tập tin C biên dịch với gcc.)
Dưới đây là hoàn cảnh của tôi và những gì tôi đã cố gắng:
NASM không hoạt động
Tôi có thể lắp ráp và liên kết một tập tin và xác minh nó hoạt động.
$ nasm -f macho64 -g -F dwarf hello2.s -o hello2.o
$ gcc hello2.o -o hello2
$ ./hello2
Hello, world!
Nhưng tôi không thể gỡ lỗi nó với gdb (lưu ý rằng tôi đã làm tất cả những codesigning vô nghĩa cần thiết):
$ 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.
Và tôi không thể gỡ lỗi nó với LLĐB:
$ 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 không hoạt động
tôi có thể lắp ráp, liên kết, và chạy:
$ gcc -g hello.s -o hello
$ ./hello
Hello, world!
Nhưng tôi không thể gỡ lỗi với 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]
(. Vì vậy, nó chỉ chạy và bỏ breakpoint)
Và tôi không thể gỡ lỗi nó với LLĐB:
$ 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.
Điều tôi đã tìm thấy trực tuyến
Here là một bài đăng trên blog về gdb
không hoạt động trên các phiên bản mới của Mac OS.
Có một vài câu hỏi StackOverflow có liên quan cũ, không cung cấp câu trả lời thích hợp.
Ngoài ra còn có this way to use Xcode, có vẻ kỳ diệu để hoạt động ... nhưng nó không thực sự làm những gì tôi muốn. Trình gỡ lỗi không thực sự nhận biết được tệp nguồn của tôi; nó chỉ là bước qua các hướng dẫn và hiển thị mã tháo rời hoặc một cái gì đó. Ngoài ra tôi không muốn sử dụng XCode.
Tôi đã hỏi về điều này trong danh sách gửi thư NASM cách đây vài tháng và không ai trả lời.
Vậy ...
Vậy là nó hiện không thể làm một trong những điều cơ bản nhất mà một người có thể muốn làm gì với một máy tính sử dụng máy Mac?
Nếu ai đó có cách để thực hiện việc này, vui lòng chỉ cho tôi chính xác các lệnh cần thiết.
Phiên bản 'nasm' nào? Phiên bản 'gdb',' llvm' là gì? –
Tôi đã thử các phiên bản nasm 2.13.01 và 2.14rc0, và các phiên bản gdb 7.12.1 và 8.0. lldb-370.0.42. Apple llvm phiên bản 8.1.0. Tôi nhận được kết quả tương tự bất kể phiên bản. Bạn có ngụ ý bạn đã nhận được gỡ lỗi để làm việc với một số phiên bản của phần mềm này? –
Tôi đang đề cập đến chú thích phát hành 2.13: "Định dạng đối tượng macho giờ đây hỗ trợ định dạng gỡ lỗi lùn, theo yêu cầu của các toolchains mới hơn". nhưng bạn đã cho biết bạn đang ở gần nhất. Bạn đã hỏi trên diễn đàn co thắt? –