同事说有台PC连接设备,软件非常卡顿,观其CPU爆高。于是收集回来两个dump文件,看看堆栈情况:dump1 dump2 对比发现,均为主线程CPU爆满,这也能解释为什么界面卡顿。但是疑惑的是观察堆栈,发现的堆栈信息在软件运行时不可能存在的上下文。大概能猜测现在的dump和pdb文件不匹配。这大概是PE模块在发布前签名造成了二进制发生改变,所以与生产时的PDB版本对不上。于是,祭出X64dbg,通过最上面的栈帧定位到程序对应的崩溃点: 通过上下文提示:QImage::width,可以与dump1的最上面的栈帧时匹配的。然后查找该函数的被引用的地方,发现了调用方上下文: 再观察提示,最终发现,调用函数为Vision::MatToQImage.接下来,定位源码: 通过源码,找到相关模块负责人沟通,确认问题应该是,程序可能开启了相机实时采集,结果不断刷新UI,从而导致了界面卡顿。
总结:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
1
Imxz LaserMaker
PDB版本对不,符号应该load不上吧,除非强制load。