有时候需要去检查哪些代码调用了某些接口,但是经常发生的问题是,某些模块,实际上看不到代码,只能看到库文件。这种情况下,可借助gnu工具来检查。
先写个简单的测试代码:
$ cat pcstring.h
#ifndef __pcstring_h__
#define __pcstring_h__
class pcstring
{
public:
static bool copy(const char *from, char *to, int size);
};
#endif //__pcstring_h__
$ cat pcstring.cpp
#include “pcstring.h”
bool pcstring::copy(const char *from, char *to, int size)
{
}
g++ -g -c pcstring.cpp -o pcstring.o
ar -rsv libpcstring.a pcstring.o
$ cat test2.cpp
#include “pcstring.h”
void fun(void)
{
char test[10];
pcstring::copy(“aaaa”, test, 10);
}
g++ test2.cpp -g -c -o test.o
ar -rsv libtest.a test.o
假如,我们要检查哪些地方调用了 pcstring::copy(), 但是又看不到test2.cpp文件,只能看到 libtest.a。
1)使用 readelf:
2)使用 nm
3)如果 库文件是 debug版的(可以反汇编出源码),也可以用 objdump:
另外,这些工具也可以查询某个模块定义哪些可供外部使用的符号。
微纳核芯获近亿首轮融资,将研发高端AIOT SOC芯片
铜包钢接地线怎么焊接,控制焊接温度有何技巧
富士通众多明星产品齐齐亮相慕尼黑电子展
紫光破产重组方案确定,北京智路和北京建广联合体接盘
兽药残留定量检测仪的产品特点是怎样的
readelf,nm, objdump工具使用的用法和总结
5G体验方案被相继推出!将开售的华为Mate20X预约相当火爆
工业级路由器如何网络过滤
STC11F32单片机的射频读卡器设计
理想汽车官宣:降价!
岭南通·羊城通空发卡业务正式支持ApplePay
芬兰公民认为5G技术使用的频率对健康有害正在试图阻止5G基站的扩散
华为荣耀8:荣耀8手机的爱之深,恨之切!
5G基站功耗,到底有多可怕?
广东省将以重大产业项目建设带动工业投资 并支持珠海集成电路全产业链项目
超外差收音机方框图及性能指标
VR全景的三点作用分析
润和软件HopeStage与奇安信网神终端安全管理系统、可信浏览器完成产品兼容性互认证
罗讯教授团队发表了在多核阵列振荡器和功率放大器研究领域的两项成果
Vishay推出带有施密特触发器功能的新型1 MBd高速光耦