无法使用.bss段内存

时间:2018-04-13 16:44:26

标签: assembly x86

我正在尝试在.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所述,在评论中编辑的问题是最小的,完整的和可验证的。

1 个答案:

答案 0 :(得分:0)

在进一步研究之后,问题是彼得在评论中提到的错误使用立即寻址。我仍然不确定为什么这会阻止我运行程序,并且只能假设这是由某种操作系统内存保护引起的。