Есть ли варианты отладки для 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 "удалить" отладочную информацию. Потерять это!

Другие вопросы по тегам