您的位置:首页 > 编程语言

代码优化,WINDOWS下使用DUMPBIN提取DLL文件中的符号

2016-07-06 22:44 501 查看
一个跨平台软件,其中有一段代码,需要从动态链接库中提取出匹配指定规则的符号,在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-f,A-F]{4}_(Recv|Send)_ComponentRegister)");
for (int pos = 0; (pos = regExp.indexIn(qOutput, pos)) != -1; )
{
QString topic_code_str = regExp.cap(1).mid(2, 4);

// OTHER CODE

pos += regExp.matchedLength();
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: