SIGSEGV 将寄存器简单移动到 NASM 中的内存

SIGSEGV on simple move register to memory in NASM

我一定是遗漏了一些非常基本的东西。搜索 SO 但找不到此特定问题的答案。这是我的 NASM 代码:

%include "io64.inc"

section .text
    myvar db "This is not working", 0
global CMAIN
CMAIN:
    mov rbp, rsp; for correct debugging
    ;write your code here
    xor rax, rax
    mov [myvar], rax
    ret

它在带有 SIGSEGV 的 move [myvar], rax 行崩溃。我只是想在该地址存储一些零。

谢谢!

PS:在 Windows 10 64 位上使用 SASM 构建/运行/勾选 64 位选项(否则为默认设置)进行调试。

section .text
   myvar db "This is not working", 0

.text是一个没有写权限的可执行节。这样做是为了防止某些类型的漏洞。您应该将 myvar 放入可写部分,例如.data(如果变量应该在程序执行的整个过程中都存在),将变量放在堆栈上(如果它不应该比创建它的函数更长寿),或者将 .text 更改为可写(出于安全原因不推荐,但 possible)。