Есть ли варианты отладки для ld
Я написал программу на ассемблере, которая в целях тестирования просто завершается. Код выглядит следующим образом:
section .text
_global start
_start:
mov eax, 1
mov ebx, 0
int 0x80
Программа явно в 32-битной; однако я использую 1 64-битный процессор и операционную систему, поэтому я скомпилировал его (используя nasm) и связал его следующим образом:
nasm -f elf exit.asm
ld -m elf_i386 -s -o exit exit.o
отлаживая программу с помощью GDB, я не могу перечислить код, так как нет символов отладки.
(gdb) list
No symbol table is loaded. Use the "file" command.
Используя gcc, вы можете использовать опции -ggdb для загрузки символов при компиляции AC-файла. но так как я не знаю, как использовать gcc для компиляции 32-битной сборки для 64-битных машин (я искал это, но не могу найти решение), я вынужден использовать ld. я могу загрузить символы отладки, используя ld? извините за длинный вопрос и лишнюю информацию. Заранее спасибо.
2 ответа
Отладочная информация генерируется nasm
когда вы проходите -g
, Кроме того, вам также нужно указать, какой тип отладочной информации вы хотите (обычно dwarf), что делается с помощью -F
переключатель. Итак, чтобы собрать свой файл, напишите
nasm -f elf -F dwarf -g file.asm
тогда ссылка без -s
чтобы сохранить таблицу символов и отладочную информацию:
ld -m elf_i386 -o file file.o
-s
switch указывает ld "удалить" отладочную информацию. Потерять это!