¿Es posible depurar el ensamblaje x64 en Mac OS?

Me gustaría poder escribir y depurar el ensamblaje x64 en mi Mac con Sierra 10.12.4. Uno pensaría que esto no sería un deseo particularmente difícil u oscuro, pero a pesar de muchas horas de esfuerzo y mucha búsqueda en línea, no he tenido éxito y no he encontrado a nadie más que lo haya hecho.

Preferiría usar el ensamblador NASM, pero usaré GAS o cualquier cosa con sintaxis Intel si es necesario. (Por cierto, tenga en cuenta que tanto gdb como lldb funcionan bien con archivos C compilados con gcc).

Aquí está mi situación y lo que he intentado:

NASM no funciona

Puedo armar y vincular un archivo y verificar que funcione.

$ nasm -f macho64 -g -F dwarf hello2.s -o hello2.o
$ gcc hello2.o -o hello2
$ ./hello2
Hello, world!

Pero no puedo depurarlo con gdb (tenga en cuenta que hice todas las tonterías necesarias para la firma de códigos):

$ 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.

Y no puedo depurarlo con 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 no funciona

Puedo ensamblar, vincular y ejecutar:

$ gcc -g hello.s -o hello
$ ./hello
Hello, world!

Pero no puedo depurar con 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]

(Así que simplemente corrió e ignoró el punto de interrupción).

Y no puedo depurarlo con 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.

Cosas que he encontrado en línea

aquí es una publicación de blog sobregdb no funciona en nuevas versiones de Mac OS.

Hay un par de viejas preguntas relacionadas con StackOverflow, ninguna de las cuales proporciona una respuesta adecuada.

También hayde esta manera usar Xcode, que milagrosamente parece funcionar ... pero en realidad no hace lo que quiero. El depurador no tiene conocimiento de mi archivo fuente; es solo seguir las instrucciones y mostrar el código desmontado o algo así. Además, no quiero usar XCode.

Pregunté sobre esto en la lista de correo NASM hace un par de meses y nadie respondió.

Entonces...

Entonces, ¿es actualmente imposible hacerlo?Una de las cosas más básicas que una persona puede querer hacer con una computadora usando una Mac?

Si alguien tiene una manera de hacer esto, muéstreme exactamente los comandos necesarios.

Respuestas a la pregunta(1)

Su respuesta a la pregunta