assembly 使用GDB调试x86 NASM程序时无法打开文件

57hvy0tb  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(109)

下面是一个从我的代码中阅读文件的简化示例:

section .data
    filename db 'txt.txt', 0x00

section .bss
    fd resd 0x01
    buff resb 0x100

section .text
    global _start

_start:
    ; open file
    mov eax, 0x05     ; SYS_OPEN
    mov ebx, filename
    xor ecx, ecx
    mov edx, 0o400    ; r--------
    int 0x80

    ; check if file was opened successfully
    cmp eax, 0x00
    js _exit
    
    mov [fd], eax    ; copy file descriptor

    ; read file
    mov eax, 0x03    ; SYS_READ
    mov ebx, [fd]
    mov ecx, buff
    mov edx, 0x100
    int 0x80

    ; close file
    mov eax, 0x06    ; SYS_CLOSE
    mov ebx, [fd]
    int 0x80

_exit:
    mov eax, 0x01    ; SYS_EXIT
    mov ebx, 0x00
    int 0x80

字符串
当我编译并运行程序时,文件读取成功,但当我通过GDB启动调试过程时,打开文件后,eax寄存器中有一个负数,而不是文件描述符,这表明错误

2vuwiymt

2vuwiymt1#

但问题是在运行GDB时必须指定要打开的文件的完整路径,例如${fileDirname}/<filename>

相关问题