将 reg 存储到 .DATA 节中的 var 时出现段错误

2023-12-10

因此,我尝试使用 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(使用前将#替换为@)

将 reg 存储到 .DATA 节中的 var 时出现段错误 的相关文章

随机推荐