基于linux程序中段的学习总结详解

linux程序的段陆陆续续接触过一些,今天适当的总结一下,时间仓促,总结的比较零散。
linux 段:
text:已编译程序的机器代码。
.rodata:只读数据。printf中的格式串,或者开关语句的跳转表。
data:已初始化的全局变量。
bss:未初始化的全局变量。
symtab:符号表。
注意:
1、如果定义一个全局变量,int i = 0;它被初始化为0,但是,它却不是放在data段中的,而是放在bss段中的。因为编译器可能会做一些优化,如果初始化为0,则它会将它等同于未初始化的变量。这样的可能要求他会将所有未初始化的全局变量(bss段)初始化为0。——但是这个可能会和编译器有关系。
2、对于static全局变量,它在符号表中有一个属性表示他是local的,不是global。local的符号式不允许被其他的文件引用的。
3、static定义的局部变量,编译器会把它作为static全局变量来处理。它在符号表中是出现的(局部变量是不出现的)。唯一不同的是,它会把它在符号表中的名字改掉,一般会增加一个后缀:“.1788”。用这种方法来防止和其他的全局变量重名。而且也可以防止对它的调用。
4、段是有对齐的。如果定义一个char字符,会发现它有时会增加四个字节,之后定义,段大小便不再增加。
5、查看程序段的工具包括:readelf,objdump(加上-t可以查看变量属于哪个段),size(可以查看各个段的大小。)

(0)

相关推荐

  • 基于linux程序中段的学习总结详解

    linux程序的段陆陆续续接触过一些,今天适当的总结一下,时间仓促,总结的比较零散.linux 段:text:已编译程序的机器代码..rodata:只读数据.printf中的格式串,或者开关语句的跳转表.data:已初始化的全局变量.bss:未初始化的全局变量.symtab:符号表.注意:1.如果定义一个全局变量,int i = 0;它被初始化为0,但是,它却不是放在data段中的,而是放在bss段中的.因为编译器可能会做一些优化,如果初始化为0,则它会将它等同于未初始化的变量.这样的可能要求他

  • 基于C语言中段错误的问题详解

    当我在linux下写c语言的时候经常会遇到段错误.所以就来细究一下. 段错误或段违规(segmentation violation)查看Expert C Programming(Peter Van Der Linden) Pg.156解释到段错误是由于内存管理单元(MMU)的异常所致,而该异常则通常是由于解除引用一个未初始化或非法的指针引起. 就是指针正在引用一个并不位于你的地址空间中的地址.书中的例子 复制代码 代码如下: int *p = 0;  *p = 17; 这里显然 地址0 并不是你

  • 基于Linux搭建Apache网站服务配置详解

    Apache作为一款开源软件,是广泛应用的web应用之一,Apache有两个主要版本1.X和2.X,一般我们使用2.X版本,比起1.X版本它支持很多新的功能,下载Apache源码包的地址为:https://httpd.apache.org ,下载到源码包后开始准备安装: 1.为避免发生端口冲突,程序冲突等问题,如果有rpm方式安装的httpd服务,建议将其卸载. 2.挂载系统镜像,切换至系统盘中的Packages目录,安装相关依赖包(注意,最好一个一个的依次安装,因为如果有些安装包已经安装了,一

  • 基于Linux网关服务器squid配置过程详解

    前言 在此,我们要配置一个只对内部网络提供代理服务的 Proxy Server.它具有如下功能它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法, 普通用户则需要输入用户名和口令才能正常使用. 高级用户没有 访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制. 安装 从源中安装 源中自带稳定版本,执行下面的命令进行安装 sudo apt-get install squid squid-common 源码编译安装 当然你也可以到官方网站下载最新的版本进行

  • 基于linux下获取时间函数的详解

    //-------------------------------------------------------------//asctime(将时间和日期以字符串格式表示)#include<time.h>定义函数char * asctime(const struct tm * timeptr);函数说明asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回.此函数已经由时区转换成当地时间,字符串格式为:"We

  • 基于mpvue搭建微信小程序项目框架的教程详解

    简介: mpvue框架对于从没有接触过小程序又要尝试小程序开发的人员来说,无疑是目前最好的选择.mpvue从底层支持 Vue.js 语法和构建工具体系,同时再结合相关UI组件库,便可以高效的实现小程序开发 前言: 本文讲述如何搭建完整的小程序项目框架,因为是第一次使用,有不完善的地方请大佬指正. 搭建内容包括: 1.使用scss语法:依赖插件sass-loader .node-sass 2.像vue一样使用路由:依赖插件 mpvue-entry 和 mpvue-router-patch 3.使用

  • 基于Tomcat安全配置与性能优化详解

    Tomcat 是 Apache软件基金会下的一个免费.开源的WEB应用服务器,它可以运行在 Linux 和 Windows 等多个平台上,由于其性能稳定.扩展性好.免费等特点深受广大用户喜爱.目前,很多互联网应用和企业应用都部署在 Tomcat 服务器上,比如我们公司,哈. 之前我们 tomcat 都采用的是默认的配置,因此在安全方面还是有所隐患的.上周对测试环境的所有服务器的tomcat都做了安全优化,其间也粗略做了一些性能优化,这里就简单记录分享下! 一.版本安全 升级当前的tomcat版本

  • 低门槛开发iOS、Android、小程序应用的前端框架详解

    现如今跨平台开发技术已不是什么新鲜话题了,在市面上也有一些开源的框架可供选择,然而技术成熟.产品服务健全的平台并不多,其中也不乏推陈出新的框架值得关注. 比如最近使用的AVM,由APICloud迭代推出的多端开发框架,基于JavaScript,兼容多语法,如果是Vue.React的用户,可直接上手,没什么学习成本,具备虚拟DOM,可一次编写多端渲染:主要是APICloud上线已有7年,相对已经成熟,所以我把自己的一些认知和实践结合AVM官方文档的内容做了一下整理,希望能对需要使用跨平台开发技术的

  • 基于JS脚本语言的基础语法详解

    JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法: 1.所有的字符全都是英文半角的: 2.大部分情况下每条语句结束后要加分号: 3.每一块代码结束后加换行:4.程序前呼

  • 微信小程序 本地数据存储实例详解

    微信小程序 本地数据存储实例详解 前言 如果您在看此文章之前有过其他程序的开发经验,那一定会知道一般例如安卓或者苹果的原生APP都提供了本地的存储功能,甚至可以使用sqlite数据库来做存储.可是微信的小程序框架基于微信本身,其实际运行环境只是在浏览器里面,所以不会提供那么丰富的数据存储实力.但html5开始已经可以在浏览器里面存储数据,好在微信的小程序给这个功能封装好了,这样我们可以使用数据存储. 每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStor

随机推荐