我正在尝试在.bss内存中存储一个文件描述符,用于从一个文件读取并写入另一个文件的基本Linux程序。我一直无法让它发挥作用。
程序不会返回错误,但无法正常工作。将文件描述符存储在堆栈上时,它可以正常工作。当我尝试在gdb中运行程序时,我得到以下输出:During startup program exited normally.
以下是代码的简化版本:
.section .data
.equ SYS_EXIT, 1
.equ LINUX_SYSCALL, 0x80
.section .bss
.equ BUFFER_SIZE, 500
.equ DESCR_SIZE, 4
.lcomm BUFFER_DATA, BUFFER_SIZE
.lcomm BUFFER_IN_DESCR, DESCR_SIZE
.lcomm BUFFER_OUT_DESCR, DESCR_SIZE
.section .text
.globl _start
_start:
movl $7, BUFFER_IN_DESCR
movl $SYS_EXIT, %eax
movl $BUFFER_IN_DESCR, %ebx
int $LINUX_SYSCALL
非常感谢任何帮助!
如Peter所述,在评论中编辑的问题是最小的,完整的和可验证的。
答案 0 :(得分:0)
在进一步研究之后,问题是彼得在评论中提到的错误使用立即寻址。我仍然不确定为什么这会阻止我运行程序,并且只能假设这是由某种操作系统内存保护引起的。