我编写了一个汇编程序,出于测试目的,只需退出。代码如下:
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在编译c文件时加载符号。但是因为我不知道如何使用gcc为64位机器编译32位程序集(我已经搜索了这个但是找不到解决方案),我被迫使用ld。我可以使用ld加载调试符号吗?对不起长期的问题和多余的信息感到抱歉。提前谢谢。
答案 0 :(得分:5)
当您通过nasm
时,-g
会生成调试信息。此外,您还需要指定所需的调试信息类型(通常是矮人),这是通过-F
开关完成的。所以要汇编你的文件,写一下
nasm -f elf -F dwarf -g file.asm
然后在没有-s
的情况下链接以保留符号表和调试信息:
ld -m elf_i386 -o file file.o
答案 1 :(得分:2)
-s
开关告诉ld" strip"调试信息。失去了!