Debuggin nasm with gdb - 找不到外部子程序文件

时间:2017-10-19 18:50:20

标签: gdb nasm

我有两个源文件:

  • main3.asm
  • prt_dec.asm

我使用以下命令编译和链接文件:

nasm -f elf -g -F stabs main3.asm
nasm -f elf -g -F stabs prt_dec.asm
ld -m elf_i386 main3.o prt_dec.o

我使用以下命令运行gdb:

gdb ./a.out

一切都很好。没有编译或链接错误,程序返回所需的结果。但是,我想通过gdb逐步完成该程序,以更好地理解内部和调试工具本身。我遇到的问题是:

尽管gdb调用外部定义的子例程prt_dec,但它似乎无法访问定义它的源代码。例如,如果在gdb中使用以下命令:

(gdb) list main3.asm:1

我得到main3.asm源代码文件的前10行。但是,当我尝试在其他源代码文件上使用相同的命令时:

(gdb) list prt_dec.asm:1

我收到错误"没有名为prt_dec.asm的源文件"

这里发生了什么?为什么gdb不能查看链接的其他文件的源代码?

如果有帮助,我已在下面添加了源代码文件(两个文件都已缩短,并删除了不相关的代码):

main3.nasm:

        SECTION .data                   ; initialized data section

lf:     db  10                          ; just a linefeed 

        SECTION .text                   ; Code section.

        global  _start                  ; let loader see entry point
        extern  prt_dec

_start:
        push    dword 42
        call    prt_dec
        add     esp, 4

        mov     eax, 4                  ; write message
        mov     ebx, 1
        mov     ecx, lf
        mov     edx, 1                  ; LF is a single character
        int     080h

exit:   mov     eax, 1                  ; exit function
        mov     ebx, 0                  ; exit code, 0=normal
        int     080h                    ; ask kernel to take over

prt_dec.asm:

[section .data]

digits: db "0123456789"         ; decimal digits lookup table


[section .bss]

outputBuffer:   resb 10         ; largest 32-bit value represented in decimal
                                ; is 10 digits (2^32)


[section .txt]

global prt_dec

prt_dec:

; code here takes 32-bit value on stack when
; subroutine was called, converts and stores the decimal
; representation of the 32-bit value in outputBuffer,
; and writes the result to stdout

ret

0 个答案:

没有答案