一个跨平台软件,其中有一段代码,需要从动态链接库中提取出匹配指定规则的符号,在Linux中,使用了objdump对.so文件进行反汇编,提取符号,但在Windows当中,由于没有objdump,虽然有dumpbin也可以对.dll文件进行反汇编,但依赖于vc环境,所以之前一直是使用遍历匹配的方式,来查找匹配的符号,效率很低。今天突然想到以前的项目中,在windows里用sed时,只需要部署几个相关的exe和库,联想到,可否只部署dumpbin.exe以及相关的库?尝试着排除了下,竟然只需要三个文件:
dumpbin.exe
link.exe
mspdb100.dll(该文件名随dumpbin及VS版本变动)。
上代码:
#ifdef _WIN32
QString qExeCmd = "dumpbin -exports " + libFile;
#else
QString qExeCmd = "objdump -x " + libFile;
#endif
QProcess *proc = new QProcess();
proc->start(qExeCmd);
proc->waitForFinished(1000); //等待执行完毕,同时防止程序长时间BLOCK
QString qOutput(proc->readAllStandardOutput());
QRegExp regExp;
regExp.setPattern("(T_[0-9,a