硬汉嵌入式论坛

 找回密码
 立即注册
查看: 209|回复: 6
收起左侧

[技术讨论] LD文件解析

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 6 天前 | 显示全部楼层 |阅读模式
MEMORY
{
  rom (LRX) : ORIGIN = ROM_ORIGIN, LENGTH = ROM_LENGTH
  ram (WX!R) : ORIGIN = RAM_ORIGIN, LENGTH = RAM_LENGTH
  config_00804000 : ORIGIN = 0x00804000, LENGTH = 0x4
  config_00804004 : ORIGIN = 0x00804004, LENGTH = 0x4
}
像这个文件里面内存区域被定义为WX!R,可写可执行非可读,那数据怎么会放到RAM里面去?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116196
QQ
发表于 6 天前 | 显示全部楼层
帮顶,确实诡异
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 6 天前 | 显示全部楼层
根据文档https://sourceware.org/binutils/docs/ld/MEMORY.html#MEMORY
The attr string must consist only of the following characters:

‘R’
Read-only section

‘W’
Read/write section

‘X’
Executable section

‘A’
Allocatable section

‘I’
Initialized section

‘L’
Same as ‘I’

‘!’
Invert the sense of any of the attributes that follow
w表示可写可读不是只可写,!R表示非只读,这样看来就没有问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116196
QQ
发表于 6 天前 | 显示全部楼层
xuzuotao 发表于 2025-6-3 15:04
根据文档https://sourceware.org/binutils/docs/ld/MEMORY.html#MEMORY
The attr string must consist onl ...

如果是这样解释,那确实可以
回复

使用道具 举报

1

主题

57

回帖

65

积分

初级会员

积分
65
发表于 6 天前 | 显示全部楼层
本帖最后由 scu319hy 于 2025-6-3 15:24 编辑

这样理解是有偏差的,这几个标记对应着几个属性值。
'!'表示不具有某个属性,而不是反转属性本身的字面逻辑意义
'!R'的意义是匹配那些不具有'R'属性的段。
例如:
W  => 段里有W属性就能匹配,有没有R属性不关心
W!R => 段里要有W属性,但一定不能有R属性
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 6 天前 | 显示全部楼层
对,这样说更准确
回复

使用道具 举报

24

主题

195

回帖

267

积分

高级会员

积分
267
QQ
发表于 6 天前 | 显示全部楼层
放在哪里和属性有关系吗?单纯由 ORIGIN 决定吧?只要后续的标签段符合这个MEM段的定义,链接器都不会报错吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 19:14 , Processed in 0.245080 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表