我是汇编和NASM的新手。我试图在.bss部分定义一个变量并使用它,但我无法让它运行。它给我以下错误:
“写入位置0x0000000000000000C时发生访问冲突”
下面是我的代码:
section .bss
var: resb 64
section .text
global _start
_start:
[BITS 64]
mov qword [var],10
我尝试了各种各样的东西,如mov rax, 10
和mov [var], rax
和这类的东西,但我不能让它运行。
1条答案
按热度按时间q43xntqr1#
你试图做的事情不会起作用。
这是因为在编写shell代码时,除了文本部分之外没有其他部分。不可能定义静态变量并读取/写入它们。此外,您还会遇到shell代码必须独立于位置的问题,但nasm默认为绝对寻址模式
要解决此问题,您需要编写
选择RIP相对寻址模式或通过发出
然而,在运行时没有bss部分,因此在其中写入变量将不起作用。相反,您可以将变量放在堆栈上,例如: