当前位置:网站首页>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
边栏推荐
- Postgresql source code (66) insert on conflict grammar introduction and kernel execution process analysis
- 7. The principle description of LVS load balancing cluster
- Postgresql源码(66)insert on conflict语法介绍与内核执行流程解析
- 拿捏JVM性能优化(自己笔记版本)
- How to simplify the automation of modern e-procurement?
- 【C语言进阶】程序环境和预处理
- Deep learning -- CNN clothing image classification, for example, discussed how to evaluate neural network model
- SVM介绍以及实战
- 杭电多校-Slipper-(树图转化+虚点建图)
- 3000字,一文带你搞懂机器学习!
猜你喜欢

什么是数字孪生智慧城市应用场景

sql语句查询String类型字段小于10的怎么查

软件测试如何系统规划学习呢?

TL431的基本特性以及振荡电路

7.LVS负载均衡群集之原理叙述

七夕节,我用代码制作了表白信封

技术解析|如何将 Pulsar 数据快速且无缝接入 Apache Doris

if,case,for,while

汇编语言之栈

This Thursday evening at 19:00, the fourth live broadcast of knowledge empowerment丨The realization of equipment control of OpenHarmony smart home project
随机推荐
详解八大排序
TL431的基本特性以及振荡电路
【MD5】采用MD5+盐的加密方式完成注册用户和登录账号
day13--postman接口测试
帮助企业实现数字化转型成功的八项指导原则
System design. Seckill system
How to open a CITIC Securities online account?is it safe?
The Shell function
Use serve to build a local server
XSS related knowledge points
复现20字符短域名绕过
文件系统的简单操作
路网编辑器技术预研
汇编语言之栈
21 days learning challenge 】 【 sequential search
内网服务器访问远程服务器的端口映射
2.15 keil使用电脑端时间日期
Learn iframes and use them to solve cross-domain problems
Deep learning -- CNN clothing image classification, for example, discussed how to evaluate neural network model
JVM Notes