有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
我编写了一个汇编程序,出于测试目的,它只是退出。代码如下:
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