《程序员的自我修养》第三章 目标文件里有什么

本文深入探讨了PC端可执行文件的两种主要格式:Linux下的ELF(Executable Linkable Format)和Windows下的PE文件。详细讲解了.c语言代码如何在.text段执行,已初始化变量在.data段存储,未初始化变量在.bss段存储,以及只读数据在.rodata段的存放。同时,介绍了ELF文件结构,包括头文件、段表、重定位表和字符串表,以及链接过程和强弱符号的概念。

在PC端的可执行文件,主要是linux下的ELF(Executable Linkable Format)文件和windows下的PE文件。

一般c语言执行代码都保存在.text段上,已经初始化的全局变量或者局部静态变量保存在.data段上。未初始化的全局变量和局部静态变量保存在.bss段上。.rodata代码段存放的是只读数据。

ELF结构:头文件(ELF文件的描述信息),段表(描述了每个段的基本信息),重定位表,字符串表。

链接的本质是把不同的目标文件之间相互粘合在一起。目标文件的相互拼合实际上是对地址的引用。

强符号和弱符号:对于c/c++来说,编译器默认的函数和初始化的全局变量为强符号,未初始化的全局变量为弱符号。链接器会按照下面的方式选择强符号和弱符号:如果一个符号在其他文件中是弱符号,在某个文件中时强符号,则是强符号;强符号不能够被多次定义;如果一个符号在所有文件中都是弱符号,则选择占空间最大的一个。

强引用和弱引用:未被定义的弱引用,链接器不认为它是一个错误,而是会将其值设置为0或者某个特殊值。在gcc中,我们在函数前面添加 __attribute__ ((weakref))  关键字,将改函数声明为弱引用。如果该函数只有函数签名没有函数体,并且前面被声明了该关键字__attribute__((weakref)),改函数在编译和链接的时候编译器不会报错,但是在调用时会报地址访问错误的错。

弱引用和弱符号对用户来说十分有用。比如库中的弱引用或者弱符号能够被用户定义的强引用或者强符号覆盖。这样方便程序的裁剪和组合。

 

下载前必看:https://pan.quark.cn/s/a4b39357ea24 在本资料中,将阐述如何运用JavaScript达成单击下拉列表框选定选项后即时转向对应页面的功能。 此种技术适用于网页布局中用户需迅速选取并转向不同页面的情形,诸如网站导航栏或内容目录等场景。 达成此功能,能够显著改善用户交互体验,精简用户的操作流程。 我们须熟悉HTML的`<select>`组件,该组件用于构建一个选择列表。 用户可从中选定一项,并可引发一个事件来响应用户的这一选择动作。 在本次实例中,我们借助`onchange`事件监听器来实现当用户在下拉列表框中选定某个选项时,页面能自动转向该选项关联的链接地址。 JavaScript的`window.location`属性旨在获取或设定浏览器当前载入页面的网址,通过变更该属性的值,能够实现页面的转向。 在本次实例的实现方案,运用了`eval()`函数来动态执行字符串表达式,这在现代的JavaScript开发实践中通常不被推荐使用,因为它可能诱发安全问题及难以排错的错误。 然而,为了本例的简化展示,我们暂时搁置这一问题,因为在更复杂的实际应用中,可选用其他方法,例如ES6中的模板字符串或其他函数来安全地构建和执行字符串。 具体到本例的代码实现,`MM_jumpMenu`函数负责处理转向逻辑。 它接收三个参数:`targ`、`selObj`和`restore`。 其中`targ`代表要转向的页面,`selObj`是触发事件的下拉列表框对象,`restore`是标志位,用以指示是否需在转向后将下拉列表框的选项恢复至默认的提示项。 函数的实现通过获取`selObj`中当前选定的`selectedIndex`对应的`value`属性值,并将其赋予`...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值