当前位置:网站首页>C专家编程 第5章 对链接的思考 5.4 警惕Interpositioning
C专家编程 第5章 对链接的思考 5.4 警惕Interpositioning
2022-08-04 04:44:00 【weixin_客子光阴】
Interpositioning(有些人称它为”interposing”)就是通过编写与库函数同名的函数来取代该库函数的行为。不仅你自己所进行的所有对该库函数的调用将被自己版本的函数调用所取代,而且所有调用该库函数的系统调用也将用你的函数取而代之。Interpositioning本身并不是bug,它是编译器明确要求支持的。
不要让程序中的任何符号成为全局的,除非有意把它们做成程序的接口之一。
mktemp现在已被ANSI C标准库函数tmpname所取代。
列出的标识符不应该出现在自己程序程序的声明中。其中有些标识符是始终保留的,其他一些则只有在包含一个特定的头文件后才是保留的。还有些标识符只在全局范围内才是保留的,其他一些则无论在全局范围还是在文件范围都予以保留。同时要注意所有的关键字都是保留的。避免麻烦最容易的方法就是认为这些标识符始终属于系统所有,不把它们用作自己的标识符。
有几项看上去像这样: is[a-z]anything
这表示任意以“is”开头,后面跟一个从a~z的小写字母(但不包括诸如数字之类的东西),然后再接任意字符。
另外有几项看上去像这样:acos, -f, -l。
它表示3个标识符acos、acosf、acosl都是保留的。所有位于math头文件内的函数都有一个接受一个double参数的基本版本。那里可能有两个额外的版本:基本名后加后缀l表示该函数接受一个long double参数:基本名后加后缀f表示该函数接受一个float参数。
ANSI C标准第6.1.2节规定,对于外部的标识符,编译器可以自行定义,使它们不区分大小写。同时,外部标识符的前6个字符必须与其他标识符不同(ANSI C标准第5.2.4.1节,“编译限制”)。对于所链接的其他函数库,也有一些需要避免使用的符号。你应该查看ABI文档,看看有那些标识符需要避免。
如果标识符是被保留的,就表示用户不能重新定义它。然而,这不是一个约束条件。当这种情况发生时,它并不要求编译器给出错误信息。它只是造成一些不可移植问题或出现未定义的行为。
可以在ld程序中使用-m选项,让编译器产生一个报告。它里面包括了被Interpose的符号的说明。通常,带-m选项的ld会产生一个内存映射或列表,显示在可执行文件的什么地方放入了那些符号。它同时显示了同一个符号的多个实例,通过查看报告的内容,用户可以判断是否发生了Interpositioning。
ld程序中的-D选项是随SunOS5.3引入的,目的是提供更好的链接-编辑调试。这个选项允许用户显示链接-编辑过程和所包含的输入文件。如果需要监视从archive中提取对象的过程,这个选项尤其有用。它同时可用于显示运行时绑定信息。
ld复杂程序的说明:
*使用ldd命令列出可执行文件的动态依赖集。这条命令会告诉你动态链接的程序所需要的函数库
*ld程序的-Dhelp选项能提供一些信息,有助于查找链接过程中出现的问题:
*查看ld程序的在线文档;
*阅读SunOs Linker and Libraries Manual
边栏推荐
- Senior PHP development case (1) : use MYSQL statement across the table query cannot export all records of the solution
- 7-3 LVS+Keepalived集群叙述与部署
- mq应用场景介绍
- 7-1 LVS+NAT 负载均衡群集,NAT模式部署
- 软件测试如何系统规划学习呢?
- OpenGL绘制圆
- Embedded database development programming MySQL (full)
- [Ryerson emotional speaking/singing audiovisual dataset (RAVDESS)]
- 深度学习21天——卷积神经网络(CNN):实现mnist手写数字识别(第1天)
- 学会iframe并用其解决跨域问题
猜你喜欢
8. Haproxy builds a web cluster
3000 words, is take you understand machine learning!
docker安装mysql与宿主机相差8小时的问题。
Towards Real-Time Multi-Object Tracking(JDE)
附加:对于“与数据表对应的实体类“,【面对MongoDB时,使用的@Id等注解】和【以前面对MySQL时,使用的@Id等注解】,是不同的;
7-1 LVS+NAT 负载均衡群集,NAT模式部署
【Ryerson情感说话/歌唱视听数据集(RAVDESS) 】
【流程图】
7-3 LVS+Keepalived Cluster Description and Deployment
ADC噪声全面分析 -03- 利用噪声分析进行实际设计
随机推荐
drools from download to postman request success
本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
基于gRPC编写golang简单C2远控
7.LVS负载均衡群集之原理叙述
This Thursday evening at 19:00, the fourth live broadcast of knowledge empowerment丨The realization of equipment control of OpenHarmony smart home project
有趣的 Kotlin 0x0E:DeepRecursiveFunction
7-2 LVS+DR Overview and Deployment
Mobile payment online and offline payment scenarios
软件测试如何系统规划学习呢?
路网编辑器技术预研
目标检测-中篇
PL/SQL Some Advanced Fundamental
How to simplify the automation of modern e-procurement?
复现20字符短域名绕过
【C语言进阶】程序环境和预处理
See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business
转:管理是对可能性的热爱,管理者要有闯进未知的勇气
3000 words, is take you understand machine learning!
系统设计.如何设计一个秒杀系统(完整版 转)
Converts XML tags to TXT format (voc conversion for yolo convenient training)