明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2548|回复: 14

[经验] 函数Exit和quit的深入研究

  [复制链接]
发表于 2021-11-6 17:30:40 | 显示全部楼层 |阅读模式
本帖最后由 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 00  01       ;函数开始
09 B4 02                 ; 字符串"vlmsg.dll" 入栈
33 20 35 00 00       ;整数13600 入栈
51 02 B3 02 01 00  ;调用函数 string-resource
51  01 E2 02 01 00  ;调用函数 _msg-err
16                         ;函数结束

;2b4  vlmsg.dll   
;2b3  string-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。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 5明经币 +5 收起 理由
xvjiex + 1 赞一个!
伪书虫86 + 1 赞一个!
Bao_lai + 1 赞一个!
自贡黄明儒 + 1 赞一个!
tryhi + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 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功能退出前要给各部件发送消息,告诉要退出了,自己做好清理工作。这样就有可能被截获,取消你的退出动作,导致你无法退出。
发表于 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


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

学到了,谢谢楼主
发表于 2021-11-6 17:57:42 | 显示全部楼层
大师研究的深入      佩服  佩服  佩服
发表于 2021-11-7 08:44:53 来自手机 | 显示全部楼层
讲的太透彻了,可惜我看不懂
 楼主| 发表于 2021-11-7 09:09:03 | 显示全部楼层
hushiyong11 发表于 2021-11-7 08:44
讲的太透彻了,可惜我看不懂

可能我没讲清楚,改了一下,请看一楼红字部分结论
发表于 2021-11-7 11:45:02 | 显示全部楼层
多谢分享,下载试试
发表于 2021-11-7 15:31:50 | 显示全部楼层
vl-exit-with-value
发表于 2021-11-8 09:28:57 | 显示全部楼层
不是源码不买
 楼主| 发表于 2021-11-8 09:37:05 | 显示全部楼层

没币的免费送

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2021-11-8 10:19:49 | 显示全部楼层
要用还是得花币买,不然对不起研究者
 楼主| 发表于 2021-11-8 12:30:47 | 显示全部楼层
chenxiy825 发表于 2021-11-8 10:19
要用还是得花币买,不然对不起研究者

有币支持一下,没币也能用。开心就好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 01:29 , Processed in 0.276900 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表