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)。
我一定是遗漏了一些非常基本的东西。搜索 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)。