最近对 VBS 字符串 Chr(0) 注①截断讨论得比较多,看来有必要介绍一下 VBS 字符串的内部实现。Demon 友情提示:本文需要一些 C 语言和 Windows 编程的知识,VBScript 初学者慎入。
VBS 是基于微软的 ActiveX/COM 技术实现的,而 COM 对象为了做到支持任何语言,定义了一系列通用的数据类型,微软称之为自动化对象类型(Automation data types),其中之一就是 BSTR。VBS 在内部是以 BSTR 来表示字符串的,BSTR 在 WTypes.h 中定义:
[url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms221105%28v=vs.85%29.aspx]参考 MSDN 文档[/url]。
理论说的有点抽象,下面用代码来说明:
[url=http://wangye.org/blog/archives/284/]ASP/VBScript中CHR(0)的由来以及带来的安全问题[/url]》、《[url=http://wangye.org/blog/archives/292/]ASP上传漏洞之利用CHR(0)绕过扩展名检测脚本[/url]》、《[url=http://www.shirne.com/?cid=16&id=118]ASP缺陷—-一个特殊字符chr(0)[/url]》、《[url=http://demon.tw/programming/python-asp.html]用Python脚本写ASP页面[/url]》,应该就不会有疑问了吧。
时间关系就不再展开了,如果你想了解更多关于 COM 组件的知识,我推荐你拜读一下 [url=http://www.codeproject.com/script/Membership/View.aspx?mid=88625]Jeff Glatt[/url] 的神作《[url=http://www.codeproject.com/KB/COM/com_in_c1.aspx]COM in plain C[/url]》。
仅以此文回答[url=http://demon.tw/programming/python-asp.html/comment-page-1#comment-5672]雨中风铃的问题[/url]。
注①:本文中 Chr(0) 和 NUL 交替使用,表示同一个意思。
原文: [url=http://demon.tw/programming/vbs-file-unicode.html]http://demon.tw/programming/vbs-file-unicode.html[/url]