当前位置:网站首页>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
边栏推荐
- The video of machine learning to learn [update]
- 将xml标签转换为txt(voc格式转换为yolo方便进行训练)
- 元宇宙“吹鼓手”Unity:疯狂扩局,悬念犹存
- The Shell function
- 帮助企业实现数字化转型成功的八项指导原则
- Senior PHP development case (1) : use MYSQL statement across the table query cannot export all records of the solution
- 杭电多校-Slipper-(树图转化+虚点建图)
- For Qixi Festival, I made a confession envelope with code
- XSS相关知识点
- 缓存穿透、缓存击穿、缓存雪崩以及解决方案
猜你喜欢
机器学习之视频学习【更新】
How to keep the source code confidential in the development under the burning scenario
深度学习21天——准备(环境配置)
mq应用场景介绍
深度学习——以CNN服装图像分类为例,探讨怎样评价神经网络模型
Simple operation of the file system
mysql索引笔记
Converts XML tags to TXT format (voc conversion for yolo convenient training)
The Shell function
How to systematically plan and learn software testing?
随机推荐
Enterprise live broadcast is on the rise: Witnessing focused products, micro-like embracing ecology
Basic characteristics of TL431 and oscillator circuit
leetcode 12. 整数转罗马数字
Oracle与Postgresql在PLSQL内事务回滚的重大差异
share总结
某母婴小程序加密参数解密
manipulation of file contents
附加:对于“与数据表对应的实体类“,【面对MongoDB时,使用的@Id等注解】和【以前面对MySQL时,使用的@Id等注解】,是不同的;
Reproduce 20-character short domain name bypass
本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
Towards Real-Time Multi-Object Tracking(JDE)
大型连锁百货运维审计用什么软件好?有哪些功能?
7-2 LVS+DR概述与部署
OpenGL绘制一个圆锥
21 days learning challenge 】 【 sequential search
Introduction and application of go module
2003. 每棵子树内缺失的最小基因值 DFS
Embedded database development programming MySQL (full)
【技巧】借助Sentinel实现请求的优先处理
RSS订阅微信公众号初探-feed43