C 符号表导出
编译符号表导出示例:
使用GCC编译链接参数--version-script 控制动态符号表,如想
使用链接参数 --retain-symbols-file 控制静态符号表,--version-script 控制动态符号表,后面都是接含有导出符号的文件的名字。这两个参数在移植windows下的动态库很有用,windows下的DEF文件能控制导出符号,我们可以在linux下的构建脚本中解析DEF生成一个导出符号文件,然后作为retain-symbols-file,version-script的参数。示例如下:
这是a1.c文件
[cpp]
- #include <stdio.h>
- #include <stdlib.h>
- void func_1()
- {
- printf("a1 :: func_1\n");
- }
- void func_2()
10. {
- 11. printf("a1 :: func_2\n");
12. }
- 13.
14. void func_3()
15. {
- 16. printf("a1 :: func_3\n");
17. }
这是a1.sym文件,控制静态导出符号
[cpp]
- func_1
- func_3
这是a1.map文件,控制动态导出符号
global表示要导出的符号,local表示不导出的,*表示都不导出
[cpp]
- {
- global:
- func_1;
- func_2;
- local: *;
- };
生成共享库
[cpp]
- gcc a1.c -shared -o liba1.so -Wl,--retain-symbols-file=a1.sym -Wl,--version-script=a1.map
查看符号表:
readelf -s liba1.so
- Symbol table '.dynsym' contains 7 entries:
- Num: Value Size Type Bind Vis Ndx Name
- 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
- 1: 00000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.1.3 (2)
- 2: 00000000 0 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.0 (3)
- 3: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
- 4: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
- 5: 00000400 20 FUNC GLOBAL DEFAULT 11 func_2
- 6: 000003ec 20 FUNC GLOBAL DEFAULT 11 func_1
- 10.
- 11.
12. Symbol table '.symtab' contains 27 entries:
- 13. Num: Value Size Type Bind Vis Ndx Name
- 14. 0: 00000000 0 NOTYPE LOCAL DEFAULT UND
- 15. 1: 00000114 0 SECTION LOCAL DEFAULT 1
- 16. 2: 00000138 0 SECTION LOCAL DEFAULT 2
- 17. 3: 0000015c 0 SECTION LOCAL DEFAULT 3
- 18. 4: 000001cc 0 SECTION LOCAL DEFAULT 4
- 19. 5: 00000232 0 SECTION LOCAL DEFAULT 5
- 20. 6: 00000240 0 SECTION LOCAL DEFAULT 6
- 21. 7: 00000270 0 SECTION LOCAL DEFAULT 7
- 22. 8: 000002c0 0 SECTION LOCAL DEFAULT 8
- 23. 9: 000002d0 0 SECTION LOCAL DEFAULT 9
- 24. 10: 00000300 0 SECTION LOCAL DEFAULT 10
- 25. 11: 00000330 0 SECTION LOCAL DEFAULT 11
- 26. 12: 00000468 0 SECTION LOCAL DEFAULT 12
- 27. 13: 00000482 0 SECTION LOCAL DEFAULT 13
- 28. 14: 000004ac 0 SECTION LOCAL DEFAULT 14
- 29. 15: 000004d8 0 SECTION LOCAL DEFAULT 15
- 30. 16: 00001f0c 0 SECTION LOCAL DEFAULT 16
- 31. 17: 00001f14 0 SECTION LOCAL DEFAULT 17
- 32. 18: 00001f1c 0 SECTION LOCAL DEFAULT 18
- 33. 19: 00001f20 0 SECTION LOCAL DEFAULT 19
- 34. 20: 00001fe8 0 SECTION LOCAL DEFAULT 20
- 35. 21: 00001ff4 0 SECTION LOCAL DEFAULT 21
- 36. 22: 00002008 0 SECTION LOCAL DEFAULT 22
- 37. 23: 0000200c 0 SECTION LOCAL DEFAULT 23
- 38. 24: 00000000 0 SECTION LOCAL DEFAULT 24
- 39. 25: 00000414 20 FUNC LOCAL DEFAULT 11 func_3
- 40. 26: 000003ec 20 FUNC GLOBAL DEFAULT 11 func_1
显而易见:动态符号表中是函数func_2,func_1,静态符号表中是func_3,func_1
C 符号表导出的更多相关文章
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
详解link 有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错 ...
- (转载) C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
转载http://blog.csdn.net/neo_ustc/article/details/9024839 有 些人写C/C++(以下假定为C++)程序,对unresolved external ...
- GCC制作动态库导出符号表【转】
转自:https://blog.csdn.net/whb_fei/article/details/76974543 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- ELF Format 笔记(七)—— 符号表
最是那一低头的温柔,像一朵水莲花不胜凉风的娇羞,道一声珍重,道一声珍重,那一声珍重里有蜜甜的忧愁 —— 徐志摩 ilocker:关注 Android 安全(新手) QQ: 2597294287 符号表 ...
- 使用objdump objcopy查看与修改符号表
使用objdump objcopy查看与修改符号表动态库Linuxgccfunction 我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库.这时需要查看可执行程序或者动态库中的符 ...
- ELF 动态链接 so的动态符号表(.dynsym)
静态链接中有一个专门的段叫符号表 -- ".symtab"(Symbol Table), 里面保存了所有关于该目标文件的符号的定义和引用. 动态链接中同样有一个段叫 动态符号表 - ...
- 转: iOS崩溃堆栈符号表使用与用途
转:http://bugly.qq.com/blog/?p=119 iOS崩溃堆栈符号化,定位问题分分钟搞定! 2015.3.16 腾讯Bugly 微信分享 最近一段时间,在跟开发者沟通过程中,萝 ...
- Linux设备驱动程序 之 内核符号表
insmod使用公共内核符号表来解析模块中未定义的符号.功能内核符号表中包含了所有全局内核项(函数和变量)的地址,这是实现模块化驱动程序所必须的.当模块装载到内核后,它所导出的任何符号都会变成内核符号 ...
- 数据库多张表导出到excel
数据库多张表导出到excel public static void export() throws Exception{ //声明需要导出的数据库 String dbName = "hdcl ...
随机推荐
- UI设计四要素
信息.样式.布局.交互. +层次: UI所有的工作都可以从这几个方面入手.
- MySql学习笔记(三) —— 聚集函数的使用
1.AVG() 求平均数 select avg(prod_price) as avg_price from products; --返回商品价格的平均值 ; --返回生产商id为1003的商品价格平均 ...
- MFC_2.1使用单选和多选框
使用单选和多选框 单选 1.拖控件 设置名字,CTRL+D设置顺序,属性设置第一个GROUP为TRUE: 2.设置第一个按钮绑定变量为 值 INT型 名称m_RadioIndxe; 3.设置单击响应内 ...
- 机器学习_K近邻Python代码详解
k近邻优点:精度高.对异常值不敏感.无数据输入假定:k近邻缺点:计算复杂度高.空间复杂度高 import numpy as npimport operatorfrom os import listdi ...
- NOIP2000方格取数(洛谷,动态规划递推)
先上题目: P1004 方格取数 下面上ac代码: ///如果先走第一个再走第二个不可控因素太多 #include<bits/stdc++.h> #define ll long long ...
- 04StringBuffer相关知识、Arrays类、类型互换、正则、Date相关
04StringBuffer相关知识.Arrays类.类型互换.正则.Date相关-2018.7.12 1.StringBuffer A:StringBuffer的构造方法: public Strin ...
- zend studio 12.5.1 window 安装并设置笔记
下载百度云上的安装包-----------------------------------------------安装时,解决window 10的权限问题 安装完成后的设置设置字体window=> ...
- 恶补数论(二) Baby-Step-Giant-Step 大步小步求离散模对数
知识概述 好吧,我承认这是我初三寒假就听过的知识,然而我现在早就高一了(又是寒假,只不过我已经在省选了...) 额,这是求离散模对数的一种算法 也就是求满足方程a^x≡b(mod p)的最小的x(其中 ...
- Windows窗口创建的具体步骤
/*实现窗口创建的六步骤:第一步:创建入口函数WinMain第二步:注册窗口类第三部:实现回调函数的功能第四步:显示窗口第五步:更新窗口第六步:消息循环*/ #include "stdafx ...
- 搭建Kafka运行环境-Mac版
停止kafka服务: kafka_2.12-0.10.2.1> bin/kafka-server-stop.sh kafka_2.12-0.10.2.1> bin/zookeeper-se ...