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

如何查看目标文件内.rodata+指定偏移位置存储的具体内容?

查看未链接目标文件.rodata段引用内容的方法

.rodata+偏移形式的引用,本质是访问只读数据段存储的常量,从你贴的反汇编片段判断,这些引用全部指向传给std::cout的字符串字面量。未链接的.o目标文件里.rodata段内容已经完整写入,不需要链接成可执行文件,通过以下两种方法就能直接查到对应内容:

方法一:命令行直接查看(效率最高)

  • 直接输出指定段的十六进制内容+对应ASCII解码:执行objdump -s -j .rodata assignment6_1.o,输出内容左侧第一列是.rodata段内的偏移地址,中间是十六进制原始值,右侧是对应的可打印ASCII字符。你要找的.rodata+0x41、.rodata+0x53这类位置,直接匹配左侧偏移找对应行,右侧就能看到完整的字符串内容,不需要额外计算。
  • 如果想快速提取文件内所有字符串,也可以执行strings -t x assignment6_1.o,输出会标注每个字符串在整个文件内的十六进制偏移,配合readelf -S assignment6_1.o查到的.rodata段文件起始偏移,做简单加法就能对应上你看到的段内偏移。

方法二:用Bless十六进制编辑器查看

  • 先执行readelf -S assignment6_1.o,在段表头里找到.rodata对应的条目,记下它的文件起始偏移(Offset列)。
  • 用Bless打开目标文件,跳转到刚才记下的.rodata起始偏移位置,从这个位置开始计数,往后偏移0x41字节就是.rodata+0x41对应的存储位置,编辑器右侧的ASCII预览区直接就能看到存储的内容,其余偏移(0x53、0x5e、0x6e等)按同样逻辑计算偏移即可。

补充说明:你现在分析的是未完成链接的重定位目标文件,汇编里的0地址占位、PLT相关的重定位条目都是链接阶段才会修正的内容,.rodata段里存储的常量、字符串在编译完成时就已经写入目标文件,不会受链接过程影响,直接在.o文件里就能查到完整内容。从你贴的反汇编逻辑看,连续4次都是给std::cout传.rodata里的char*参数、调用ostream的C字符串输出重载,还原成C++就是连续4行std::cout << "字符串常量";的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:04:04