Mar*_*off 1 x86 assembly nasm segmentation-fault sections
所以我正在尝试使用 x86 编写一些代码,但似乎无法将寄存器的内容移动到内存中的某个位置。
代码就是这样
global main
SECTION .DATA
var_i: DD 0
SECTION .TEXT
main:
push DWORD 4
pop EAX
mov [var_i], EAX
mov EAX, 0
ret
Run Code Online (Sandbox Code Playgroud)
我在代码上使用了 nasm 和 gcc。我遇到的问题是,每当我尝试移动到内存中的位置时,它都会出现段错误
您使用的是哪种系统/对象格式?我猜你在 Linux 或 Unix 上使用 ELF,因为这可以解释你的问题:
ELF 中的节名称区分大小写,大多数基于 ELF 的操作系统的特殊节.text和.data被理解,但你的节.TEXT和.DATA没有意义。结果,他们只是在其他部分之后陷入可执行文件并获得相同的访问权限。如果您只是链接上面的代码,那将在该.fini部分之后,因此它将是可执行的和只读的。因此,当您尝试写入变量时,会出现段错误。
更改您的代码以使用.data和.text作为部分名称,它应该可以工作。