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

在GNU汇编器中获取标签地址遇赋值为0问题,求排查方案

在GNU汇编器(RISC-V)中用.word存储标签地址显示为0的问题解决

你的问题核心是混淆了汇编阶段和链接阶段的作用:你当前查看的是未链接的目标文件(test.o),此时汇编器还无法确定data_r的最终绝对地址,所以会用0x00000000作为占位符,等待链接器后续填充正确地址。

验证重定位项的存在

你可以用readelf查看目标文件的重定位表,确认data位置确实存在指向data_r的重定位请求:

riscv64-unknown-elf-readelf -r test.o

输出会包含类似如下的条目:

Relocation section '.rel.text' at offset 0x40 contains 1 entry:
 Offset     Info    Type            Sym.Value  Sym. Name
00000000  00000201 R_RISCV_32       00000000   data_r

解决方案:完成链接步骤

只有链接器将目标文件合并为可执行文件后,才会把data_r的最终绝对地址填入data的.word中。执行以下命令:

riscv64-unknown-elf-ld -o test test.o && riscv64-unknown-elf-objdump -dsS test

此时查看反汇编结果,data的位置就会显示data_r的正确绝对地址(具体值取决于链接脚本的起始地址,比如默认可能是0x10004)。

关于地址列表的写法

你当前的写法data: .word data_r完全正确,如果要存储多个地址,直接扩展即可:

data:
    .word data_r, data_s, data_t
data_r: .byte 0x65
data_s: .byte 0x66
data_t: .byte 0x67

main: j main

链接后,data区域会依次填充三个标签的正确地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:41:03