所以我试图用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
我在代码上使用nasm和gcc。 我遇到的问题是,每当我尝试移动到内存中时,它就会出现段错误
答案 0 :(得分:2)
您使用的是哪种系统/对象格式?我猜你在Linux或Unix上使用ELF,因为这可以解释你的问题:
ELF中的部分名称区分大小写,并且大多数基于ELF的操作系统的特殊部分.text
和.data
都被理解,但您的部分.TEXT
和{{1没有任何意义。因此,他们只是在其他部分之后陷入可执行文件并获得相同的访问权限。如果您只是链接上面的代码,那么它将位于.DATA
部分之后,因此它将是可执行的并且是只读的。因此,当您尝试写入变量时,会出现段错误。
将您的代码更改为使用.fini
和.data
作为部分名称,它应该有效。