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

汇编定义Thread Local Storage报错“非空字符串存入.tbss”原因咨询

汇编TBSS段错误“attempt to store non-empty string in section `.tbss'”原因及解决

错误原因

你当前的汇编代码顺序有误:.LOCALMAP:标签定义放在了.section .tbss指令之前,导致这个标签被归属到了之前的代码段(比如.text),而非目标的.tbss段。后续在.tbss段中对LOCALMAP符号进行类型、大小声明并分配空间时,汇编器会因为符号归属段不匹配,误将标签相关信息当作非空字符串尝试存入.tbss段——而.tbss是@nobits类型的段,仅允许存放未初始化的零值数据,不能包含任何非空内容,因此触发错误。

另外,在AFL的afl-as.h环境中,汇编器对段切换和符号定义的顺序要求严格,跨段的符号定义会打破段规则检查,进而引发这类错误。

修正后的代码

调整指令顺序,先切换到.tbss段,再定义标签:

"   .section .tbss,\"awT\",@nobits\n"
" .LOCALMAP:\n"
"   .type  LOCALMAP,@object\n"
"   .size LOCALMAP,8\n"
"   .zero 8\n"

补充说明

  • .tbss是线程本地存储的未初始化数据段,@nobits标记意味着该段在目标文件中不占用实际磁盘空间,仅在程序运行时分配内存并初始化为零。
  • 在AFL汇编器环境中,所有线程本地存储的符号必须严格归属到.tbss段,符号定义必须紧跟在.section切换指令之后,避免跨段符号冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:55:18