有ld的调试选项吗

are there debugging options for 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时,可以在编译c文件时使用选项-ggdb加载符号。但由于我不知道如何使用 gcc 为 64 位机器编译 32 位程序集(我搜索过这个但找不到解决方案,)我不得不使用 ld。我可以使用 ld 加载调试符号吗?很抱歉问题很长,信息过多。提前致谢。

-s 开关告诉 ld "strip" 调试信息。丢掉那个!

当您通过 -g 时,调试信息由 nasm 生成。此外,您还需要指定所需的调试信息类型(通常是 dwarf),这是通过 -F 开关完成的。所以要assemble你的文件,写

nasm -f elf -F dwarf -g file.asm

然后link没有-s保留符号table和调试信息:

ld -m elf_i386 -o file file.o