baitang36 发表于 2021-11-6 17:30:40

函数Exit和quit的深入研究

本帖最后由 baitang36 于 2022-3-18 08:00 编辑

有朋友问,函数exit和quit有什么区别?它显示的信息能不能改?
先来做个实验,在命令行输入!exit回车
显示 命令: !exit
#<SUBR @0d6753c0 QUIT>
在命令行输入!quit回车
命令: !quit
#<SUBR @0d6753c0 QUIT>
发现显示的内容是完全一样的,也就是说exit只是quit的一个别名,功能没有任何差别。
在命令行输入(exit)回车
显示 命令: (exit)
; 错误: quit / exit abort
这个字符串"quit / exit abort" 太明显了,一看就知道是调用了exit,能不能改一下?
根据这个信息#<SUBR @0d6753c0 QUIT>,找到了它在内存中的地址,通过这个地址又找到了它的老家,开始地址是文件vlaflb.fsl中的3344h,它的程序码(16进制)如下:
14 01 00 0001       ;函数开始
09 B4 02               ; 字符串"vlmsg.dll" 入栈
33 20 35 00 00       ;整数13600 入栈
51 02 B3 02 01 00;调用函数 string-resource
5101 E2 02 01 00;调用函数 _msg-err
16                         ;函数结束

;2b4vlmsg.dll   
;2b3string-resource
;2e2_msg-err

手工反编译成源码就是:
(defun quit()
( _msg-err( string-resource"vlmsg.dll"    13600 ))
)
它调用了未公开保留函数 _msg-err,实现退出和显示信息。
因为保留函数是只能在fas中使用,无法在lsp中使用,我做了一个小程序exit.fas,定义了一个函数exit-msg来实现自定义退出信息的功能。
加载后就可以调用函数exit-msg
用法是:(exit-msg 提示信息字符串)
例如(exit-msg“注册码不正确!”)
还发现一个未公开保留函数,_exit-process,作用是退出acad.exe,直接返回操作系统。
用法:(exit-process 整数)
例如 (exit-process 123)
这用法有点狠,直接退出程序,会丢失未保存的图。
结论:exit和quit是一样的,没区别。
加载我的exit.fas后,可以自定义退出时的提示信息,还可以直接退出cad。


baitang36 发表于 2021-11-10 08:44:17

本帖最后由 baitang36 于 2021-11-10 08:52 编辑

yyz639 发表于 2021-11-9 14:13
我用了(exit-process 1)后出现的信息是:VEVAL-STR+ARX命令中发生异常
未处理的异常C0000027(C000027h), ...
加载了很多程序的情况下,突然终止,很多东西没有复位,后果不可预料,死机也是可能的。这功能本来就是不按套路出牌,如果用来对付盗版,你还担心它死机吗?正常程序不能这么用的。
正常的exit功能退出前要给各部件发送消息,告诉要退出了,自己做好清理工作。这样就有可能被截获,取消你的退出动作,导致你无法退出。

yyz639 发表于 2021-11-9 14:13:29

本帖最后由 yyz639 于 2021-11-9 14:25 编辑

我用了(exit-process 1)后出现的信息是:VEVAL-STR+ARX命令中发生异常
未处理的异常C0000027(C000027h),地址8CC3114fH单击确定后出现:
致命错误Unhandled Access Violation Reading 0x0000 Exception at e51c5f7dh
楼主看看这个是怎么回事?
[em14


yyz639 发表于 2021-11-10 14:10:33

baitang36 发表于 2021-11-10 08:44
加载了很多程序的情况下,突然终止,很多东西没有复位,后果不可预料,死机也是可能的。这功能本来就是不 ...

学到了,谢谢楼主:lol

f4800 发表于 2021-11-6 17:57:42

大师研究的深入      佩服佩服佩服

hushiyong11 发表于 2021-11-7 08:44:53

讲的太透彻了,可惜我看不懂

baitang36 发表于 2021-11-7 09:09:03

hushiyong11 发表于 2021-11-7 08:44
讲的太透彻了,可惜我看不懂

可能我没讲清楚,改了一下,请看一楼红字部分结论

sunny_8848 发表于 2021-11-7 11:45:02

多谢分享,下载试试

雨的节奏 发表于 2021-11-7 15:31:50

vl-exit-with-value

chenxiy825 发表于 2021-11-8 09:28:57

不是源码不买

baitang36 发表于 2021-11-8 09:37:05

chenxiy825 发表于 2021-11-8 09:28
不是源码不买

没币的免费送

chenxiy825 发表于 2021-11-8 10:19:49

要用还是得花币买,不然对不起研究者

baitang36 发表于 2021-11-8 12:30:47

chenxiy825 发表于 2021-11-8 10:19
要用还是得花币买,不然对不起研究者

有币支持一下,没币也能用。开心就好
页: [1] 2
查看完整版本: 函数Exit和quit的深入研究