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

NASM x86_64添加换行符时出现链接错误,如何修复?

问题修复方案

你碰到的R_X86_64_8链接错误,本质是x86_64架构的寻址限制导致的,不是语法错误:mov byte [numb+4], newl这种写法试图直接把.data段中newl的字节值作为8位立即数写入.bss段地址,但链接器没法把newl的符号地址压缩成8位偏移量,所以触发了截断错误。

下面是两种可行的修复方法:

  • 通过寄存器中转写入
    先把newl的值加载到8位寄存器,再写入目标地址,绕开直接内存到内存的寻址限制:
mov al, newl
mov byte [numb+4], al
mov al, newl
mov byte [buff+12], al
  • 直接使用换行符立即数
    如果newl就是ASCII换行符(0x0a),可以直接写立即数,彻底规避符号引用带来的relocation问题:
mov byte [numb+4], 0xa
mov byte [buff+12], 0xa

额外提醒:要确保.bss段的buff和numb分配了足够空间——numb至少要5字节(4字节数据+1字节换行),buff至少13字节(12字节数据+1字节换行),防止越界写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:27:06