Debugging ld是否有调试选项

Debugging ld是否有调试选项,debugging,gcc,assembly,gdb,ld,Debugging,Gcc,Assembly,Gdb,Ld,我已经编写了一个汇编程序,出于测试目的,它只是退出。代码如下: section .text _global start _start: mov eax, 1 mov ebx, 0 int 0x80 nasm -f elf exit.asm ld -m elf_i386 -s -o exit exit.o 程序显然是32位的;但是,我使用的是1 64位处理器和操作系统,因此我编译了它(使用nasm),并将其链接如下: section .text _glob

我已经编写了一个汇编程序,出于测试目的,它只是退出。代码如下:

section .text
  _global start
_start:
  mov    eax, 1
  mov    ebx, 0
  int    0x80
nasm -f elf exit.asm
ld -m elf_i386 -s -o exit exit.o
程序显然是32位的;但是,我使用的是1 64位处理器和操作系统,因此我编译了它(使用nasm),并将其链接如下:

section .text
  _global start
_start:
  mov    eax, 1
  mov    ebx, 0
  int    0x80
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在编译c文件时加载符号。但是,由于我不知道如何使用gcc为64位机器编译32位程序集(我已经搜索过了,但找不到解决方案),我不得不使用ld。我可以使用ld加载调试符号吗?抱歉,问题太长,信息太多。提前感谢。

开关
-s
告诉ld“剥离”调试信息。丢掉它

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

nasm -f elf -F dwarf -g file.asm
然后不带
-s
链接以保留符号表和调试信息:

ld -m elf_i386 -o file file.o

尝试使用
nasm-g-F dwarf-F elf exit.asm组装。链接器不创建调试符号,您必须告诉链接器生成它们。如果存在调试信息,链接器将自动将其链接。除非由于某种原因32位代码无法使用此功能,否则可以使用
nasm-felf-g-l exit.lst exit.asm
@fuz
nasm-g-F dwarf-F elf exit.asm
强制nasm导出调试符号work@DarkEagle“不起作用”不是错误描述。到底发生了什么?错误在哪里?@jefferson使用的
nasm-felf-g-l exit.lst exit.asm
无效等待,使用
nasm-g-F dwarf-F elf exit.asm
然后删除-s参数有效。谢谢!