明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 896|回复: 9

[经验] 【原创】怎样给受保护的符号赋值

  [复制链接]
发表于 2025-12-29 13:46:23 | 显示全部楼层 |阅读模式
本帖最后由 baitang36 于 2025-12-29 22:48 编辑

先来做个试验:
命令: (setq aa princ bb 1234)
1234
命令: (setq princ bb)
1234
命令: (setq princ aa)
#<SUBR @1100d30c PRINC>
一切正常,结果符合预期。
进入vlide,然后退出。
命令: (setq princ bb)
出现弹窗提示,问题:分配给保护的符号:princ 是否进入中断循环?
如果选择是,princ没有被赋值;选择否,princ将会被赋值1234
; 用户警告: 给保护符号赋值: PRINC <- 1234
由此可见,符号的保护是因为进入过vlide被激活的。
问题来了,怎么绕过这个符号保护,在任意情况下对任意符号进行赋值呢?
经过研究,发现一个内部保留函数,_symbol-flags<- 可以解决这个问题。
在赋值之前,先改一下符号的flags,再执行(setq princ bb)就不会出现警告提示了。
(load "c:/trf_9")
(tranf '_symbol-flags<-)
(_symbol-flags<- 'princ 0)
(setq princ bb)
结论:进入vlide,会激活系统符号的保护。用_symbol-flags<-可以修改符号的flags,绕过符号保护。



本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +4 收起 理由
Bao_lai + 1 很给力!
bonny + 1 赞一个!
tryhi + 1 很给力!
zhoupeng220 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-12-30 08:00:38 | 显示全部楼层
大侠又出高作。
厉害。
回复 支持 反对

使用道具 举报

发表于 2025-12-30 16:13:10 | 显示全部楼层
原来如此。我用小菜选择易报这种错误直接卡死,好像就是出现在打开vlide的时候。
回复 支持 反对

使用道具 举报

发表于 2025-12-31 08:13:01 | 显示全部楼层
princ函数不能做为变量  直接卡死
回复 支持 反对

使用道具 举报

发表于 2025-12-31 11:53:05 | 显示全部楼层
那岂不是可以魔改系统函数了?

点评

终于有人看透我在做什么了。  发表于 2025-12-31 14:01
回复 支持 反对

使用道具 举报

发表于 2025-12-31 12:55:47 | 显示全部楼层
陨落 发表于 2025-12-31 11:53
那岂不是可以魔改系统函数了?

改后风险自担

点评

肯定是风险自担的。使用未公开的内部保留函数,本身就有一定风险。windows系统本身也有很多未公开的功能,有些软件使用了它,可能windows升级一下,这软件就废了。  发表于 2025-12-31 14:03
回复 支持 反对

使用道具 举报

发表于 2025-12-31 14:22:32 | 显示全部楼层
    (tranf '_symbol-flags<-)
    (_symbol-flags<- 'quote 0)
    (setq quote function)

以后可以用'代替function了

点评

脑洞够大  发表于 2025-12-31 16:17
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-1-23 16:59 , Processed in 0.241507 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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