微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 综合技术问答 > EDA使用问答 > ic616 isr9 以后程序不能运行的原因和临时解决

ic616 isr9 以后程序不能运行的原因和临时解决

时间:03-15 整理:3721RD 点击:
众所周知,IC616在更新ISR9以后,采用原来的补丁会导致程序启动时出现崩溃。最近我花了点时间看了下,大概明白了是怎么回事。
原因是C家现在采用了Vilabs的软件保护系统Code armor Intelligence(http://www.vilabs.com/product/co ... ware-usage-tracking)。这套系统在原有的flexlm基础上又加了许多许可证检查,主程序完整性,使用情况监控等等功能。而且还有打小报告的功能,如果它觉得你的使用有问题会偷偷通过网络将你的信息报给C家,如果你是个公司的话,很快c家就可以凭这些证据法务部来函让你交钱了。
但程序崩溃并不是这个系统预先设计的事。直接原因是和谐版使用的许可证不是真正的许可证,缺了好几项东西(SIGN2之类)。Vilabs启动时某处有个strcpy,要拷贝这些信息,但是因为许可证信息残缺,strcpy的source是个空指针,导致程序segfault。
该系统有个特点就是如果检测出程序受跟踪,比如你用gdb或者strace运行virtuoso,他就会停止运行来隐藏自己。目前我的解决办法就是再patch一下,让CAI以为正在受跟踪,从而跳过它那段有问题的检测程序。如果你用的是ISR12 64bit,可以在用hex编辑器打开virtuoso,在offset 0xb1b56f8处开始的五个字节都改成90 90 90 90 90。在我的机器上这样就不会有启动崩溃的问题。希望大家实验一下。

另外有mentor账号的,又苦于找不到analog fastspice和谐方式的可以将文件给我看看。我之前自己弄过,但现在换公司了,没有mentor账号了。

sodisne,原来如此,这么一来就能run了

佩服佩服!

佩服佩服!

分析的有问题,Vilabs并没真正启用,造成segment的原因和Vilabs没有关系



我见到的使用情况是
情况一:在strace或gdb下运行virtuoso,无segfault
情况二:正常运行,有segfault
又已知在trace情况下vilabs服务根本就不会初始化。
最合情合理的解读是vilabs的那段代码引起segfault。我说的临时解决就是让程序一直认为是在trace下所以就会跳过那段。
这段我还确实跟着debugger看了一边,确实是vilabs的检查函数中的某个strcpy引起的。也许检查程序不叫vilabs什么的,但是确实是在vilabs服务启动后,在原有的lmcheckout上增加的检查函数。



1. segment fault确实是strcpy当中一个参数如果为空造成的,但这和vilab没有关系2. vilab和flexlm是两套独立的体系,针对点不一样


1)造成segment fault的原因确实是strcpy中一个参数(若为空)引起的,但这和vilab没有关系2)vilab和flexlm是两个不同的咚咚,各自针对的保护的着力点也不一样

所以...論壇上的patch...都已經無法使用了?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top