写入 x86 程序集中的 .bss 部分

Writing to .bss section in x86 assembly

我有一个 .bss 部分,其中有一个 8 字节的缓冲区。现在,我正在寻找一种在不发出系统调用的情况下将数字 2 存储在缓冲区中的方法。这可能吗?

我的尝试无效:

        .section .text

        .section .bss

        .lcomm SAMPLE_BUFFER, 8

        .globl _start

_start:

        movl ,SAMPLE_BUFFER

        movl , %eax
        int [=10=]x80

执行时:

  $ as --32 buffer.s -o buffer.o
  $ ld -m elf_i386 buffer.o -o buffer
  $ ./buffer
  fish: “./buffer” terminated by signal SIGSEGV (Address boundary error)

您需要确保在发出 _start 的机器代码之前切换回 .text 部分。按原样,您将 _start 放入不可执行的 .bss 中,从而导致程序崩溃。

除此之外,您的代码似乎是正确的。