首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDB投诉无资料来源

GDB投诉无资料来源
EN

Stack Overflow用户
提问于 2012-12-25 04:22:39
回答 2查看 24K关注 0票数 11

我在Ubuntu 12.10 64位上运行。

我正在尝试在GDB中调试一个简单的程序集。然而,GDB的gui模式(-tui)似乎无法找到我的程序集文件的源代码。我已经重建了当前目录中的项目,并搜索谷歌,但没有任何效果,请在这里帮助我。

我的命令:

代码语言:javascript
复制
nasm -f elf64 -g -F dwarf hello.asm

gcc -g hello.o -o hello

gdb -tui hello

调试信息似乎已经加载,我可以在main()设置一个断点,但屏幕的上半部分仍然写着“ No Source Available ”。

如果您感兴趣的话,这里是hello.asm:

代码语言:javascript
复制
;  hello.asm  a first program for nasm for Linux, Intel, gcc
;
; assemble: nasm -f elf -l hello.lst  hello.asm
; link:     gcc -o hello  hello.o
; run:          hello 
; output is:    Hello World 

    SECTION .data       ; data section
msg:    db "Hello World",10 ; the string to print, 10=cr
len:    equ $-msg       ; "$" means "here"
                ; len is a value, not an address

    SECTION .text       ; code section
        global main     ; make label available to linker 
main:               ; standard  gcc  entry point

    mov edx,len     ; arg3, length of string to print
    mov ecx,msg     ; arg2, pointer to string
    mov ebx,1       ; arg1, where to write, screen
    mov eax,4       ; write command to int 80 hex
    int 0x80        ; interrupt 80 hex, call kernel

    mov ebx,0       ; exit code, 0=normal
    mov eax,1       ; exit command to kernel
    int 0x80        ; interrupt 80 hex, call kernel
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-25 12:10:07

本例中的问题是汇编程序没有为调试器生成行号信息。因此,尽管源是存在的(如果在gdb中使用"list“,它会显示源文件的列表--至少当我按照您的步骤执行时是这样的),但是调试器需要文件中的行号信息来知道哪一行对应于哪个地址。给出的信息是做不到的。

据我所知,没有办法让NASM发出.loc指令,例如as在使用gcc时所使用的指令。但是,as无法在不生成大量错误的情况下获取源文件,即使使用-msyntax=intel -mmnemonic=intel --您可能会认为这是可行的。

因此,除非更聪明的人能够想出一种方法来生成.loc条目,从而提供调试器行号信息,否则我不完全确定如何以您满意的方式回答您的问题。

票数 5
EN

Stack Overflow用户

发布于 2012-12-29 17:44:26

这句话是假的。

汇编程序确实生成行号信息(注意-g -F侏儒)位。

另一方面,他将明显的32位代码组装为64位,这可能工作,也可能不起作用。

现在,如果在NASM的调试输出中存在bug,我们需要知道这一点。

几个快速实验表明,addr2line (但不是gdb!)是否正确解码NASM生成的行号信息,但不使用矮人,因此在NASM产生矮人的方式上可能有错误。但也有一些奇怪的地方。

GNU addr2line版本2.22.52.0.1-10.fc 17 20120131,GNU ( gdb ) Fedora (7.4.50.20120-52.fc17)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14027651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档