text,bss, data 段中 text不可写由谁去保证

大米无糖 2012-03-23 12:34:03
大侠们,
我知道程序在编译后会生成在, text,bss, data等段。 text 是代码段,只读。 那我不知道这是不可写是由谁去保证? 编译器? 如果我们编译一个IMAGE, 在程序中强制修改LOad以后的内存内容,会怎么样?
...全文
230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2012-03-26
  • 打赏
  • 举报
回复
操作系统的装载器、内存管理器加上cpu
wintree 2012-03-26
  • 打赏
  • 举报
回复
系统内核保护!!!!!保护数据的。
xuexingyang 2012-03-26
  • 打赏
  • 举报
回复
如果没有操作系统,肯定是编译不成功了。
qiuhui00 2012-03-26
  • 打赏
  • 举报
回复
操作系统来保证的,如果代码段被修改了,结果是未知的。因为被修改后的代码段已经不是原本应该被执行的指令了
大米无糖 2012-03-26
  • 打赏
  • 举报
回复
我总觉得我有些概念没弄清楚,但不知道是那。
大米无糖 2012-03-26
  • 打赏
  • 举报
回复
我就是想问这个,可是一般程序都会Load在RAM中运行, 指令也是Load在RAM中, 我在想,这样如何保证不被修改? 其实我想,应该是可以强制修改的。

有程序DEBUG的时候,所设置的软中断,不就是修改了指令。
[Quote=引用 6 楼 ilprogram 的回复:]

引用 5 楼 ilprogram 的回复:
我觉得吧,会有这些段是编译器的功劳,当然,在使用编译器的时候,用户根据自己所使用的芯片的特性和设计在编译器选项中设定.text,.bss,.data的起始地址。一般是将芯片的只读区域(rom)作为.text的存储区。至于用户愣是要在写代码的时候,修改.text的内容,也木有办法,如果.text是在rom区,则写了也白写,因为写不进去,所以程序不能实现……
[/Quote]
ilprogram 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ilprogram 的回复:]
我觉得吧,会有这些段是编译器的功劳,当然,在使用编译器的时候,用户根据自己所使用的芯片的特性和设计在编译器选项中设定.text,.bss,.data的起始地址。一般是将芯片的只读区域(rom)作为.text的存储区。至于用户愣是要在写代码的时候,修改.text的内容,也木有办法,如果.text是在rom区,则写了也白写,因为写不进去,所以程序不能实现所需的功能,程序可能会崩溃的;如果.text是在……
[/Quote]

我讲的是没有操作系统,比如嵌入式裸奔的情况哈。。
ilprogram 2012-03-23
  • 打赏
  • 举报
回复
我觉得吧,会有这些段是编译器的功劳,当然,在使用编译器的时候,用户根据自己所使用的芯片的特性和设计在编译器选项中设定.text,.bss,.data的起始地址。一般是将芯片的只读区域(rom)作为.text的存储区。至于用户愣是要在写代码的时候,修改.text的内容,也木有办法,如果.text是在rom区,则写了也白写,因为写不进去,所以程序不能实现所需的功能,程序可能会崩溃的;如果.text是在ram区,则写操作会修改.text内容,程序会崩溃。所以用户可以自己写防护代码,防止在.text段进行写操作。
个人理解,若有误导请海涵。。
我才是笨蛋 2012-03-23
  • 打赏
  • 举报
回复
你生成a.out以后跟你的编译器就没有什么关系拉,所以test段的安全保障是由OS保证的 如果a.out被修改就会出现断错误
W170532934 2012-03-23
  • 打赏
  • 举报
回复
由操作系统保证的吧。
大米无糖 2012-03-23
  • 打赏
  • 举报
回复
那如果是嵌入式上, ELF什么的,或者没有操作系统的程序编译出来也有这些段。


[Quote=引用 1 楼 zmlovelx 的回复:]

操作系统保证。
强制修改可能会崩溃。
[/Quote]
帅得不敢出门 2012-03-23
  • 打赏
  • 举报
回复
操作系统保证。
强制修改可能会崩溃。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧