因此,我尝试使用 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。
我遇到的问题是,每当我尝试移动到内存中的位置时,它就会出现段错误
您使用哪种系统/对象格式?我猜你在 Linux 或 Unix 上使用 ELF,因为这可以解释你的问题:
ELF 中的节名称区分大小写,并且大多数基于 ELF 的操作系统的特殊节.text
and .data
可以理解,但是你的部分.TEXT
and .DATA
没有意义。结果,他们只是在其他部分之后陷入可执行文件并获得相同的访问权限。如果您只是链接上面的代码,那么它将在.fini
节,因此它是可执行且只读的。因此,当您尝试写入变量时,会出现段错误。
更改您要使用的代码.data
and .text
作为部分名称,它应该可以工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)