我用的是JLINK OB, 今天安装了JLINK6.30g版本, 但仿真时 The connected J-Link is defective. Proper operation cannot be guaranteed...,提示个人JLINK是有缺陷的,我点肯定后仍然能正常运行。但总不能每次仿真都提示一下吧,决定偿试一下能不能解决。
首先用OD载入JLINK.exe, 运行,一下子出现The connected J-Link is defective对话框
点OK后程序能够正常运行。咱们知道JLink的驱动在JlinkARM.dll文件中,所以切换到模块JLinkRAM. 在OD中右键-查看-模块JLINKARM。
右键-分析-分析代码
右键-查找-全部参考文本字串
在弹出的框中查找文本 The connected J-Link is
找到提示的语句, 在该行上,右键-反汇编窗口中跟随
在汇编窗口中的该行上双击HEX数据列下断点,按CTRL+F2,使程序从新运行,大约5秒后停在该行上
根据堆栈空间,和汇编代码,函数的入口点应该在PUSH Warning以前,
所以在以前的PUSH ESI上下断点,按CTRL+F2,使程序从新运行,而后乖乖停在该行上
按F8单步运行,发现有一个循环次数0x1388 的判断过程,循环结束后将弹出The connected J-Link is defective对话框,若是在循环中条件成立则跳转到JLinkARM.6FC0B4D6
尝试使程序强制跳转到JLinkARM.6FC0B4D6。双击该行,修改汇编JNZ 为 JMP,而后继续按F8单步运行,程序跳转到JLinkARM.6FC0B4D6处
而后使程序全速运行,发现再也不提示The connected J-Link is defective对话框。
用UltraEdit打开JLinkARM.dll,查找85 C0 75 77 6A 01 E8, 发现只搜到一处,将75改为EB后保存,直接运行JLINK.EXE, 再也不出现The connected J-Link is defective对话框, 问题解决
下面是修改过的JLinkARM.dll函数