You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

x86 Intel语法汇编全局变量赋值触发段错误的问题及解决

x86 Intel语法汇编全局变量写入段错误问题解决

问题现象

在x86 Intel语法汇编中,通过[rip+a]可以正常读取全局变量的值,但执行写入操作(如mov [rip+a], 4)时会触发段错误,使用的编译器为cc而非gcc。

触发段错误的代码示例:

.intel_syntax noprefix
.globl main

a:
  .int 8
main:
  push rbp
  mov rbp, rsp
  sub rsp, 0
  push [rip+a]
  pop rax
  mov dword ptr [rip+a], 4 // 添加该行后触发段错误
  mov rsp, rbp
  pop rbp
  ret

另外,此前在在线汇编工具中找不到输出Intel语法汇编的方法,搜索未获取相关有效信息。

修正后的可运行代码

经解答后,调整段属性后的可运行代码如下:

.intel_syntax noprefix
.data
a:
  .int 8
.text
.globl main
main:
  push rbp
  mov rbp, rsp
  sub rsp, 0
  mov dword ptr [rip+a], 4
  mov rax, [rip+a]
  mov rsp, rbp
  pop rbp
  ret

核心修正说明

  • 全局变量a被移入.data段:原代码未指定变量段,默认会被放置在只读的.text代码段,写入只读内存会触发段错误;.data段是可读写的数据段,适合存放需要修改的全局变量。
  • 明确划分.data(数据)和.text(代码)段,保证内存权限符合操作需求。

内容的提问来源于stack exchange,提问作者go horikoshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:57:22