Linux下全局符号覆盖问题
在windows上,默认情况下,动态库中的符号都是对外隐藏的,除非你显示的指出要导出哪些符号,否则外界是看不到的。但是linux下情况刚好相反,对静态变量和全局变量,linux下so里面的符号对外可见。这就很容易出现一个问题,就是外界很可能会无意中修改so内部的符号或符号同名但内存结构不同,带来各种问题。有一种方法能将so里面的
符号隐藏起来,避免全局符号覆盖。
1、首先,编程参数中添加编译选项 -fvisibility=hidden,这个是隐藏符号的控制。
2、其次,在要导出的接口前添加__attribute__ ((visibility("default")))。
通过以上两步,就可以像windows平台那样,只把需要的接口或变量导出去,其他的都隐藏在so内部。
例如so中要导出一个int add(int x, int y )接口,可以这样:
gcc test.c -o test -fvisibility=hidden
然后在接口处这样处理:
#define MYAPI __attribute__ ((visibility("default")))
MYAPI int add(int x, int y);
注意:
1、window平台上导出符号的命令在是返回值和函数名中,但是linux平台这一点有所不同,需要加在返回值前面,尤其是返回const char*类型时,如果不放在返回值前面会导致异常或崩溃。
2、某些情况下,so内部的单体和外部的同名单体可能会重复导致操作无效或异常的情况,可以在编译参数里面再添加一个编译选项-Wl,-Bsymbolic,这样能彻底解决同名覆盖问题。
Linux下全局符号覆盖问题的更多相关文章
- Linux下全局安装composer
下载composer curl -sS https://getcomposer.org/installer | php 将composer.phar文件移动到bin目录以便全局使用composer命令 ...
- Linux下全局安装composer方法
1.下载composer curl -sS https://getcomposer.org/installer | php 2.将composer.phar文件移动到bin目录以便全局使用compos ...
- linux下cp覆盖原so文件时引起的段错误原因确定
原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5694416.html 最近因为一个很有意思的段错误学习了一些新的东西. 当时现象是这样的,程序正在运行,系 ...
- 在linux下的使用复制命令cp,不让出现“overwrite”(文件覆盖)提示的方法。(转)
在linux下的使用复制命令cp,不让出现“overwrite”(文件覆盖)提示的方法. 一般我们在使用cp命令时加上-f选项,希望不让出现“overwrite”的提示(文件覆盖的提示).如:# cp ...
- Linux下如何使CP命令不提示覆盖
在Linux下使用CP命令,经常会提示是否覆盖,如果是太批量的文件覆盖,老是这么提示,会很烦的.那如何解决这个问题呢? 我们先来看一下原因吧! 一般我们使用的命令是cp -rf sourcefile ...
- windows下编辑过的文件在Linux下用vi打开行尾会多出一个^M符号
一般情况下,windows下编辑过的文件在Linux下用vi打开行尾会多出一个^M符号,如下图: 这是因为Windows等操作系统用的文本换行符和UNIX/Linux操作系统用的不同,Windows系 ...
- (转载)在Linux下删除文件行末尾的^M符号方法
(转载)http://www.xinfengit.com/200907/1433646.html 由于DOS下的编辑器和linux(linux教程 linux培训 )编辑器对文件行末的回车符处理不一致 ...
- Linux下fastbin利用小结——fd覆盖与任意地址free(House of Spirit)
linux下的fastbin是ctf中pwn题的重点出题点.去年(2015)中,XCTF就有两站是使用fastbin的利用作为pwn400的压轴题来出现,这也是我刚开始接触fastbin的利用,参考了 ...
- 【转】Linux下的文本dos格式转Unix格式,去除^M符号
原文网址:http://blog.csdn.net/kobejayandy/article/details/13291525 问:我在Windows中通过FTP传一个文本文件到Linux中,但是打开文 ...
随机推荐
- 【BZOJ 3482】 3482: [COCI2013]hiperprostor (dij+凸包)
3482: [COCI2013]hiperprostor Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 277 Solved: 81 Descrip ...
- 【BZOJ 2822】2822: [AHOI2012]树屋阶梯(卡特兰数+高精度)
2822: [AHOI2012]树屋阶梯 Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处 ...
- MySQL注射绕过技巧(三)
在测试一次注入的时候发现过滤了逗号 所以找到这个思路 第一次遇到的时候是看key哥挖洞 遇到后就想记录下来 正文 过滤了逗号 利用join来逐步查询 select*from(select 1)a ...
- [HAOI2012]外星人
题目大意: 告诉你一个数n,求满足φ^x(n)=1的x. 思路: 首先我们可以发现满足φ(n)=1的数只有2,也就是说你得到最终的结果,最后一步肯定是φ(2). 同时,可以发现φ(φ(2^k))=φ( ...
- ACM -- 算法小结(三)反转句子顺序与反转单词组成顺序
hdoj 1321 反转句子字母顺序 ac 2011/10/05 #include <iostream> #include <string> #include <algo ...
- request.getScheme() 取到https正确的协议(转载)
最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议 但是,明明是https url请求,发现 log里 ...
- bzoj 1789: [Ahoi2008]Necklace Y型项链 贪心
1789: [Ahoi2008]Necklace Y型项链 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/Jud ...
- JAVA容器-模拟ArrayList的底层实现
概述 ArrayList实质上就是可变数组的实现,着重理解:add.get.set.remove.iterator的实现,我们将关注一下问题. 1.创建ArrayList的时候,默认给数组的长度设置为 ...
- C#如何用OpenFileDialog控件打开图片显示到PictureBox这个控件
openFileDialog1.Filter = "图片文件|*.jpg|BMP图片|*.bmp|Gif图片|*.gif"; OpenFileDialog ofd = new Op ...
- Current limiter allows large USB bypass capacitance
The USB (Universal Serial Bus) specification requires a connected USB device to present a load to th ...