assembly NASM .bss变量错误“写入位置0x0000000000000000C时发生访问冲突”,

gstyhher  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(367)

我是汇编和NASM的新手。我试图在.bss部分定义一个变量并使用它,但我无法让它运行。它给我以下错误:
“写入位置0x0000000000000000C时发生访问冲突”
下面是我的代码:

section .bss
    var: resb 64
    
section .text
    global _start
    
_start:
    [BITS 64]
    mov qword [var],10

我尝试了各种各样的东西,如mov rax, 10mov [var], rax和这类的东西,但我不能让它运行。

q43xntqr

q43xntqr1#

你试图做的事情不会起作用。
这是因为在编写shell代码时,除了文本部分之外没有其他部分。不可能定义静态变量并读取/写入它们。此外,您还会遇到shell代码必须独立于位置的问题,但nasm默认为绝对寻址模式

[var]

要解决此问题,您需要编写

[rel var]

选择RIP相对寻址模式或通过发出

default rel

然而,在运行时没有bss部分,因此在其中写入变量将不起作用。相反,您可以将变量放在堆栈上,例如:

sub rsp, 8
mov qword [rsp], 10

相关问题