社区
C语言
帖子详情
text,bss, data 段中 text不可写由谁去保证
大米无糖
2012-03-23 12:34:03
大侠们,
我知道程序在编译后会生成在, text,bss, data等段。 text 是代码段,只读。 那我不知道这是不可写是由谁去保证? 编译器? 如果我们编译一个IMAGE, 在程序中强制修改LOad以后的内存内容,会怎么样?
...全文
230
12
打赏
收藏
text,bss, data 段中 text不可写由谁去保证
大侠们, 我知道程序在编译后会生成在, text,bss, data等段。 text 是代码段,只读。 那我不知道这是不可写是由谁去保证? 编译器? 如果我们编译一个IMAGE, 在程序中强制修改LOad以后的内存内容,会怎么样?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
操作系统保证。
强制修改可能会崩溃。
bss
段
,
data
段
、
text
段
、堆heap和栈stack
bss
段
,
data
段
、
text
段
、堆heap和栈stack
bss
段
data
段
text
段
堆(heap)栈(stack)
bss
段
bss
段
(
bss
segment)通常是指用来存放程序
中
未初始化的全局变量的一块内存区域。
bss
是英文Block Started by Symbol的简称。
bss
段
属于静态内存分配。
data
段
数据
段
(
data
segment)通常是指用来存放程序
中
已初始化的全局变量的一块内存区域。 数据
段
属于静态内存分配。
text
段
代码
段
(code segment/
text
segme
text
段
、
data
段
和
bss
段
知识介绍
一、总体概述 1、
bss
(可读可
写
)
bss
是英文Block Started by Symbol的简称,通常是指用来存放程序
中
未初始化的全局变量的一块内存区域,在程序载入时由内核清0。
BSS
段
属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户应该将它定义在可读
写
的RAM区内,源程序
中
使用malloc分配的内存就是这一块,它不是根据
data
大小确定,主要由程序
中
同时分配内存最大值所确定,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。 2、
text
(只读) ...
浅谈
text
段
、
data
段
和
bss
段
程序=
bss
段
、
data
段
、
text
段
...1.
bss
段
2.
text
段
3.
data
段
其他名词:MMC 一般情况,一个程序本质上都是由
bss
段
、
data
段
、
text
段
三个
段
组成——这是计算机程序设计
中
重要的基本概念。而且在嵌入式系统的设计
中
也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。 1.
bss
段
在采用
段
式内存管理的架构
中
(比如intel的80x86系统),
bss
段
(Block Started by Symbol segment)通常是指用来存放程序
中
未初始化的全局变量的
Freescale单片机程序3个
段
总结
BSS
DATA
TEXT
一个程序的3个基本
段
:
text
段
,
data
段
,
bss
段
;
text
段
在内存
中
被映射为只读,但.
data
和.
bss
是可
写
的。
text
段
:放程序代码的,编译时确定,只读;在代码
段
中
,也有可能包含一些只读的常数变量,例如字符串常量等。
data
段
:存放在编译阶
段
(而非运行时)就能确定的数据,可读可
写
。也就是通常所说的静态存储区,赋了初值的全局变量和赋初值的静态变量存放在这个区域,常量也存放在这个区...
浅谈.
text
段
、.
data
段
和.
bss
段
浅谈.
text
段
、.
data
段
和.
bss
段
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章