下面是一个从我的代码中阅读文件的简化示例:
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
寄存器中有一个负数,而不是文件描述符,这表明错误
1条答案
按热度按时间2vuwiymt1#
但问题是在运行GDB时必须指定要打开的文件的完整路径,例如
${fileDirname}/<filename>