AMESim ReV7.0a执行仿真时会出现类似如下错误提示:
Since the model has no state variable,
the maximum time step has been reduced to 0.1s.
lc_checkout failed with -5 - retrying after a short sleep try no:0
lc_checkout failed with -5 - retrying after a short sleep try no:1
lc_checkout failed with -5 - retrying after a short sleep try no:2
lc_checkout failed with -5 - retrying after a short sleep try no:3
lc_checkout failed with -5 - retrying after a short sleep try no:4
lc_checkout failed with -5 - retrying after a short sleep try no:5
lc_checkout failed with -5 - retrying after a short sleep try no:6
lc_checkout failed with -5 - retrying after a short sleep try no:7
lc_checkout failed with -5 - retrying after a short sleep try no:8
lc_checkout failed with -5 - retrying after a short sleep try no:9
lc_checkout failed with -5 - retrying after a short sleep try no:10
Checkout failed: No such feature exists.
Feature: hydraulic
License path: E:\AMESim\7.0.0\/licensing/license.dat
FLEXnet Licensing error:-5,357
For further information, refer to the FLEXnet Licensing End User Guide,
available at "www.macrovision.com".
AMESim model E:/AMETest/test1_ did an abnormal exit!
应该是license的限制,但本人尚不会制作无限制的license,只能暴力破解了。
由于运行时提示lc_checkout错误,而主程序用OD及UltraEdit(ue)均未查找到该字符串,又没有其它办法找到关键断点,只好用ue软件搜索amesim安装目录(关键词lc_checkout),得到三个结果。
----------------------------------------
查找 'lc_checkout' 于 'E:\AMESim\7.0.0\c3d\win32\AMELic70.dll' :
E:\AMESim\7.0.0\c3d\win32\AMELic70.dll(2783):
找到 'lc_checkout' 1 次。
----------------------------------------
查找 'lc_checkout' 于 'E:\AMESim\7.0.0\interfaces\simulink\amemex.exe' :
E:\AMESim\7.0.0\interfaces\simulink\amemex.exe(3313):
找到 'lc_checkout' 1 次。
----------------------------------------
查找 'lc_checkout' 于 'E:\AMESim\7.0.0\win32\AMELic70.dll' :
E:\AMESim\7.0.0\win32\AMELic70.dll(3554):
找到 'lc_checkout' 1 次。
查找完成, 共找到lc_checkout' 3 次。 (3 文件。)
主要关注\AMESim\7.0.0\win32\AMELic70.dll
用W32Dasm打开AMELic70.dll进行分析,可轻松找到lc_checkout failed with %d -retrying,正好与提示出错相一致,向上推移,尝试将10006E8D处的jne 10006F09改为9090,执行程序,果然没有lc_checkout failed提示,但程序进入了死循环,原来紧接其下的"All licenses for %s in use, job ..."提示是代表license当前已被占用,这就表明前面的跳转修改的位置不对。
经过仔细分析,只有程序跳转到100071A2才不会有"checkout failed"提示,因此想办法将本函数所在的第一处跳转(10006E27:je 10006E5B)改为jmp 100071A2应该就可以了。
用OD载入该DLL,跳至10006E27,修改好指令,然后用UE打开该DLL,修改指令对应的十六进制代码即可搞定。
暂时测试通过!由于一共有三个搜索结果,其余两个文件有可能也有限制,但从目录分析对普通仿真应无影响,暂不予理会。
[2008年1月20日更新]:
进一步测试,发现有时仍有license错误提示(不影响分析),如下所示:
lc_auth_data failed: No such feature exists.
Feature: thermal
License path: E:\AMESim\7.0.0\licensing\license.dat;E:\AMESim\7.0.0 -
\/licensing/license.dat
FLEXnet Licensing error:-5,21
For further information, refer to the FLEXnet Licensing End User Guide,
available at "www.macrovision.com".
继续按前面的方法分析AMELic70.dll,将100071D3处的je 100072e6改为jmp 100072e6即可消除此错误提示。
继续测试发现打开某些demo时会跳出license错误提示框(不是执行期,提示框不影响程序的执行),经分析排除
AMELic70.dll,即提示框是在主程序中检测跳出的,因此需对主程序进行分析。
此处的错误提示为checkout failed...,用W32Dasm分析AMESim.exe,查找字符,很快可以找到调用处,共有两处,但很明
显属于同一函数,经分析(此处耗费我稍许能量),修改两处即可无checkout failed提示:
005e92b6:jne 005e92ce——>jmp 005e92ce
005e9313:je 005e962c——>jmp 005e962c
修改后仍会弹出空白对话框,看来在函数的返回处还有判断,果然在OD中调试返回后,可以看到以下代码:
005e4b50:test eax,eax
005e4b52:je 005e4b60
我曾尝试在前面的函数中将eax直接置0,但程序启动时会出错,因此只能在005e4b52处做修改了:
005e4b52:je 005e4b60——>nop
重新启动amesim,运行正常,打开前面出错提示的demo时也无提示了!
注:补丁修改处较多,本人未多做测试,可能会带来一些不稳定因素,使用后果请自负!
补丁下载地址:
http://www.cnitblog.com/Files/torch/amesim.v7.0a-patch.rar