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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在x86程序集中写入.bss部分相关的知识,希望对你有一定的参考价值。

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

我的尝试不起作用:

        .section .text

        .section .bss

        .lcomm SAMPLE_BUFFER, 8

        .globl _start

_start:

        movl $2,SAMPLE_BUFFER

        movl $1, %eax
        int $0x80

执行时:

  $ 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)
答案

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

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

以上是关于在x86程序集中写入.bss部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2017 的 x86 程序集中使用 printf?

x86 程序集中的 SSE2 寄存器

拼命尝试使用 wprintf 在 64 位 NASM x86 程序集中打印 unicode

Linux进程的五个段

在 X86 程序集中访问和移动字节

如何在 x86 程序集中按值传递结构