У меня есть объектный файл, скомпилированный с использованием как (из кода ассемблера).
Если я связываю его с использованием ld , когда я пытаюсь stepi (или nexti ) GDB жалуется на доступ к памяти по адресу 0x0.Если я связываю его с помощью gcc , все в порядке.
Я предполагаю, что проблема вызвана ld , который выдает меньше разделов по сравнению с результатом связывания НКУ .
Есть ли способ настроить GDB на более подробный, чтобы я мог выяснить, что не так с исполняемым файлом?
(gdb) b main
Breakpoint 1 at 0x100000f8e
(gdb) r
Breakpoint 1, 0x0000000100000f8e in main ()
(gdb) x/10i $pc
0x100000f8e <main>: fbld 0x6c(%rip) # 0x100001000 <data1>
0x100000f94 <main+6>: fimul 0x7a(%rip) # 0x100001014 <data2>
0x100000f9a <main+12>: fbstp 0x60(%rip) # 0x100001000 <data1>
0x100000fa0 <main+18>: mov0x0 $0x2000001,%rax
0x100000fa7 <main+25>: mov $,%rdi
0x100000fae <main+32>: syscall
(gdb) si
Cannot access memory at address 0x0
0x0000000100000f94 in main ()
PS: исполняемый файл сам по себе работаеткак и ожидалось в обеих версиях.
Позднее редактирование: команды, которые я использовал для компиляции:
as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o