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

NASM .bss变量报错:Access violation writing location 0x000000000000000C

问题解决:NASM 64位程序访问违例错误

错误原因

你遇到的访问违例是因为[BITS 64]的位置错误,导致汇编器处理符号地址时采用了错误的位模式,最终程序尝试写入0x000000000000000C这个内核空间的无效地址(用户程序无写入权限)。另外,若编译链接时未指定64位目标格式,也会导致.bss段地址解析异常。

修正方案

  1. 将[BITS 64]移至文件最开头,确保整个程序以64位模式汇编
  2. 使用64位目标格式编译链接

修正后的代码

[BITS 64]
section .bss
    var: resb 64
    
section .text
    global _start
    
_start:
    mov qword [var], 10
    ; 添加64位Linux退出系统调用,避免程序执行后触发非法指令错误
    mov rax, 60
    mov rdi, 0
    syscall

编译链接命令

nasm -f elf64 your_program.asm -o your_program.o
ld your_program.o -o your_program

补充说明

  • 原代码中[BITS 64]放在_start标签内,会导致汇编器处理.bss段和全局符号时仍处于默认位模式(通常为32位),符号var的地址被错误计算,最终指向无效的低地址。
  • 修正后的代码添加了退出调用,是因为64位Linux程序执行完业务逻辑后,必须通过系统调用主动退出,否则会继续执行后续非法指令引发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:25:22