签到天数: 1987 天 连续签到: 2 天 [LV.Master]伴坛终老
管理员
讲师
  
- 积分
- 105268
 
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转脚本编程。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说明
黑月是云外归鸟的作品,我只是在他的基础上做了小小的升级,并且得到他的允许再发布出来的。
在此特别感谢云外归鸟 、dtcser。
下载载址:
黑月的用途
黑月是类似于斩月,目的是将易语言程序小型化,脱离支持库运行的工具。但实现原理和方法又与斩月不同,不需要类似的斩月壳,而是分析并转化易程序为对象文件obj,再用链接器LINK.EXE重新编译链接。这样生成的黑月程序,具有更规范更优化的PE程序文件结构,并且带来更多的功能扩展(比如使用RC资源脚本生成PE标准资源),以及带来下好处:
1、具有正常的PE可执行文件结构,经过反编译后生成的易程序代码清晰可见,完全呈现。汇编代码可分析可用专用软件跟踪调试,不会再产生误报。
2、在脱离核心支持库的同时,又不废除原有核心库命令,而是转向调用功能类似的黑月核心库。就是说,黑月可以使用大部分的原核心库命令(非窗口操作),并且黑月核心库为本人模仿原核心库功能,再重新编写的静态库。由于黑月先天优势,可以静态库抽取代码片段合成编译,就是用到的命令函数才提取相应部分代码。不用到命令不合成到目标程序。这样的好处是既保持原有功能不变,又不使程序文件大小增加,附带冗余代码。
易友们一直梦想的静态库抽取合成编译,今天在黑月已经实现了!
(黑月支持的核心库命令看随后的附表)
4、黑月可以使用PE标准资源,用RC脚本编译生成。比如使用资源对话框模板创建窗口,并配合可视化的黑月RC脚本编辑器,比斩月又多一种更方便的界面设计功能,而且与汇编和C语言的RC脚本兼容通用,使黑月程序更接近于常规程序。
5、黑月的DLL可以使用类似其它语言DLLMAIN入口函数(黑月为“Dll入口函数”),可以通过DLL的模块句柄访问DLL的PE资源、注入进程、多线程应用等等优点。
6、黑月可以突破易语言自身的限制,实现对__cdecl调用方式函数的支持,并且可以在编译时链接其它由C语言或MASM32汇编语言编写的静态库,这又大大的增强了功能扩展,对众多C语言代码资源的利用,和软件工程的协作开发创造了便利条件。
[邓学彬升级记录]
3.5.0版(2015年4月19日)
1、增加“黑月应用程序向导”,快速创建黑月程序。
2、增加命令“指针到整数”(易语言5.3x新加命令)
3、增加命令“指针到小数”(易语言5.3x新加命令)
4、增加命令“双精度小数型”(易语言5.3x新加命令)
5、增加命令“取运行时数据类型”(易语言5.3x新加命令)
6、创建默认RC资源时增加图标、对话框、XP风格选项。
7、黑月资源编辑器已打开的情况下直接切换。
3.4.0版(2015年4月13日)
1、增加对易语言5.32的支持(理论上兼容后续易语言版本)
2、增加单独的“黑月静态编译”菜单,不再覆盖易语言原有编译菜单。
3、修正“信息框”命令,匹配易语言5.32的“信息框”(多了一个父窗口参数)
[云外归鸟升级记录]
3.3.0版(2013年9月11日)
1、修正“标准输出”命令内存出错的BUG。
2、修正“增减时间”命令在增减时分秒部分,跨零点时计算出错的BUG。
3、修正“分割文本”和“分割字节集”命令在多线程中内存出错的BUG。
3.2.0版(2013年8月1日)
1、修正“近似等于”命令判断不准确的BUG。
2、修正“标准输出”命令不能在汇编模式编译后,正常运行的BUG。
3、修正“标准输入”命令总是回显的BUG(不能隐藏输入)。
4、修正所有到数值型命令,包括“到数值”命令在转换文本数字时,随机出错的BUG。
3.1.0版(2013年7月18日)
1、增加支持“数组排序”和“是否运算正确”命令。
2、增加支持“拼音处理”类命令(需要VC++模式编译,用到MFC类库)。
3、修正“到字节集”命令不支持所有的数值数组到字节集的BUG。
4、修正“标准输出”命令不能输出长文本的BUG。
5、优化“子文本替换”和“子字节集替换”命令算法,寻找和替换更快。
6、显示详细的错误信息,不再只是错误号。
7、无论编辑器布局怎么变化,都能准确定位输出窗口。
8、DLL程序的“_启动子程序”先于“Dll入口函数”执行,不然总出现“Dll入口函数”里全局类变量不能使用的怪异事情(其实是未经初始化)。
3.0.0版(2013年7月5日)
增加支持MFC静态库的编译模式,为默认编译选项,在工具菜单的黑月工具对话框里选择其它模式。
该编译模式带来的变化:
1、模仿成VC++6.0编译的MFC程序,PE结构与以前的黑月不同。
2、用该模式可以支持“DirectX2D支持库”和“DirectX3D支持库”编译。
3、可以正常方式编译所有官方易语言的无窗口组件的支持库和以后第三方用MFC类库编写的支持库。
比如原先支持的:
互联网支持库
应用接口支持库
BT下载支持库
Java支持库
进程通讯支持库
局域网操作支持库
OPenGL支持库
黑月是用整个打包的方式编译,编译出来的程序很大,现在用MFC模式可以用原版的静态库正常编译,
可以明显缩小程序文件,特别是易友最爱用的“应用接口支持库”,不会只调用一个命令就将整个支持库打包了。
注意:需要将旧版的黑月插件完全卸载干净,BlackMoon\LIB文件夹不能有旧版的静态库。
2.2.0版(2012年4月3日)
1、修改“取字节集数据”命令取文本数据在参数三为变量时出错的BUG。
2、修改“播放音乐”命令的第二个参数设为假仍循环播放的BUG。
3、在工具菜单的黑月工具对话框加上恢复1.6版以前的LOADER选项,此功能可以使EXE的编译体积大幅缩小。但一些需要初始化C函数库的支持库将不能正常使用,这点要注意!
不用再制作额外的体积补丁了,添加的链接参数,可以修改黑月的安装目录里的BlackMoon.ini配置文件里的BmLoaderOpt配置项。
此功能选项默认是关闭,需要时自己勾选上。
2.1.0版(2012年3月22日)
1、DLL命令声明DLL库名称,如果没有扩展名,则强制为动态调用,不编译进IAT导入表。用于程序适应不同系统时,个别系统DLL函数有差异的问题,比如将gdiplus.dll声明为gdiplus,则这个函数是动态调用,在调用到的时候才载入DLL并取这个函数地址。又例如,Shell32.DLL在WIN98以上的系统才增加函数StrCmpNIA,黑月没有配套新版本的LIB,是无法通过编译的,只要将Shell32.DLL声明为Shell32,即可通过编译,强制列为动态调用DLL函数。
2、修改“指定时间”命令里的秒参数被分参数代替的BUG。
3、修改“取临时文件名”命令会创建0字节文件(与易语言核心库不同)的现象。
2.0.0版(2012年3月2日)
1、修正易语言自身在WIN7 X64位系统下调试时创建的进程在结束后仍有残留的BUG,这个BUG会使临时程序进程随着调试的次数越来越多,最终导致系统崩溃(特别感谢易友胡次郎提供修正思路)。
2、修改对多维变体型数组成员读写失败的BUG。
3、修改“增减时间”在11月份增加1个月计算结果错误的BUG。
1.9.0版(2011年10月26日)
1、修改静态库调试功能对于静态库中CDECL方式的函数调用出错的BUG。
2、修改不能VB的DirecetX8组件对象的BUG。
3、明确提示用户,当前系统的硬件码与商业支持库的静态库不匹配的错误。
4、修改DLL声明不填写库文件时,将Advapi32.dll的部分函数归类到Kernel32.dll库的怪异BUG。
1.8.1版(2011年9月25日)
1、下载包被金山报毒,重新打包。
2、修改“绝对取整”命令的BUG。
1.8.0版(2011年9月24日)
1、修改对象调用时参数为“对象”时类型出错误的BUG。
2、修改变体型赋值“对象”时类型出错误的BUG。
3、修改“绝对取整”命令在数值大于0时,总是多1值的BUG。
4、改变DLL的调用方式,系统DLL仍按原来IAT导入表方式调用。用户自带的DLL可以在运行后再动态调用,比如将DLL放在图片资源里,在运行后释放到同目录,再调用该DLL的命令。或者对于GDI+的API在不同系统时的有选择的是否动态调用(需要将LIB目录下的gdiplus.lib移除,让黑月判断gdiplus.dll非系统DLL)。
5、增加静态库调试功能,原理是在第一次编译黑月程序时,生成一个名为“静态库.dll”,为所用到第三方静态库的集合,让易语言的IDE在调试时调用,让包含有静态库的黑月程序也能够调试了。注意!!!对于部分静态库编译出来的调试用的“静态库.dll”可能用不了,与编译模式有关,修改链接参数或许可以解决。
1.7.4版(2011年4月21日)
1、修改“取配置节名”的取长度有限的BUG。
2、修改变体型的“取变体型()”方法对变体型数组操作的BUG。
3、允许“结束()”命令强制中止进程,同时又保证所有资源都能正确释放(1.7.0版开始是不允许的)。
1.7.3版(2011年3月22日)
1、修改“插入文本”的BUG。
2、修改“插入字节集”的BUG。
3、修改“取文本中间”当位置值小于1时不返回空文本的BUG(与易库不一致)。
4、修改对象创建时,从指定类库文件的内部类名创建对象失败的BUG。例如:对象.创建 (“WshShell”, “wshom.ocx”)。
5、修改“增减时间”命令在计算时分秒时精度误差大的BUG。
1.7.2版(2010年12月17日)
1、修改“插入文本行”的BUG。
2、修改“移到文件首”命令的文件首位置执行返回逻辑值不正确的BUG。
3、修改“取随机数”算法与易语言核心库一致,第一个随机数会不固定为1。
4、增加支持“输入框”和“取硬盘特征字”命令(算法与易核心库一致)。
5、“ADODB数据驱动操作支持库”和“云外归鸟的线程池支持库”改为静态库编译(以前是伪静态库编译,发布时需要带上支持库,现在不用了)。
1.7.1版(2010年11月28日)
1、修改“取文本注册项”不能取出扩展型文本“REG_EXPAND_SZ”的BUG。
2、修改变体型的“赋值”方法给变体型数组赋值失败的BUG。
3、应易友的要求,可以自行选择恢复原来LOADER,体积将缩小40K左右。结束()命令也可以中断进程。但一些支持库编译后无法使用的,主要是一些C函数没有得到初始化,会出现内存错误。比如正则表达式支持库。
恢复原来程序LOADER的方法是,给源码加上链接参数,选择MSVCRT版的C函数库:
[link]
opt=/ENTRY:BMEntrypoint /nodefaultlib IBCMT /DEFAULTLIB:MSVCRT
1.7.0版(2010年11月22日)
1、修改“倒找字节集”的BUG
2、修改“倒找文本”的BUG(注意:易核心库的“倒找文本”的查找位置参数是错的)
3、修改“多文件对话框”不能设定对话框标题和只选一个文件时路径错误的BUG。
4、修改不能编译系统DLL“winspool.drv”的BUG。
5、为防360误报使用VC++6.0的LOADER,编译EXE的文件增大,工具查看为VC++6.0编译的。
6、支持易语言的“正则表达式支持库”,编译后可正常使用。
7、增加支持以下易语言的支持库的编译:
BT下载支持库
进程通讯支持库
局域网操作支持库
OPenGL支持库
Java支持库
8、修改“子文本替换”的“欲被替换的文本”和“欲被替换的子文本”相同时,不能替换的BUG。
9、修改变体型“取文本”在指针为空时,仍转换文本的BUG。
1.6.0版(2010年8月19日)
1、支持常量支持库的编译(比如尘土界面库2.0)。
2、修改“到时间”命令当参数为纯时间数字格式时出错的BUG。
3、修改“标准输出”命令不能重定向到文本文件的BUG。
4、修改“子文本替换”命令当“欲被替换的文本”比“欲被替换的子文本”短时,返回空文本的BUG。
1.5.9版(2010年4月11日)
1、修改变体型为传址型数组不能取出成员的BUG。
2、修改变体型为传址型数组取不出数组成员数的BUG(易核心库的BUG)。
3、在编译DLL时,勾选“允许编译时修改DLL函数在导出静态库中的名称”时,不再删除DEF文件,方便编写LPK之类的DLL,只需要粘贴一次导出函数。
1.5.8版(2010年3月24日)
1、修改“子文本替换”命令不区分大小写替换时漏掉后段的BUG。
2、修改调用对象方法时,参数为类模块私有成员变量调用失败的怪异BUG。
1.5.7版(2010年2月8日)
1、修改“寻找文件”命令特性与易核心库一致,不必再填写准确属性值。
2、修改“删除目录”命令特性与易核心库一致,用递归算法逐层删除包含的下级目录文件。
3、修改“写注册项”命令写入空文本指针时,读取出乱码的BUG。
4、改用Inno Setup制作黑月插件的安装程序。
1.5.6版(2010年2月7日)
1、修改“数值到格式文本”命令有千分位分隔符时的BUG。
2、修改“写注册项”命令写数值型出错的BUG。
3、修改“字符”命令当参数为0时返回空指针,与易核心库一致。
4、修改“读配置项”只能读254个字节项内容的BUG。
5、增加支持对象的“创建字体对象”和“取回字体”方法。
7、增加可以利用易语言5.0版静态库调用其它非窗口功能支持库的功能。
8、增加编译菜单显示黑月是否开示的功能,与易的静态编译或独立编译区分开。
9、自动扫描未使用到的支持库,不添加对应的静态库合成到程序当中,避免文件无端增大。
10、自动删除编译DLL时生成的*.LIB和*.EXP文件。
1.4.3版(2009年12月10日)
1、修改“子字节集替换”命令的BUG。
2、修改“子文本替换”命令的BUG。
3、修改“删除数据”命令不能删除磁盘文件数据的BUG。
4、修改“四舍五入”命令算法错误的BUG。
1.4.2版(2009年11月20日)
1、修改“子字节集替换”命令替换较长数据时内存出错的BUG。
2、增加“指针到字节集”对于指针是否有效的检测,以减少运行因指针地址无效而出错。
3、修改“标准输入”命令与原核心库不相符的问题(带有回车符)。
1.4.1版(2009年11月4日)
1、修改当DLL声明的函数和模块名与代码中文本常量相同时,出现编译的程序无法运行和易语言IDE出错的怪异错误。
2、重写“取随机数”命令算法,使随机数在范围区间内分布更均匀。
1.3.5版(2009年10月27日)
1、修改“取命令行”命令不支持中文路径名参数的BUG。
2、再次修改“取随机数”命令有数值范围时固定不变的BUG。
1.3.4版(2009年10月24日)
1、修改“子文本替换”命令当欲替换文本在文本首时后尾数据丢失的BUG。
2、修改“子字节集替换”命令当欲替换字节集在字节集首时后尾数据丢失的BUG。
3、修改“读入数据”命令在“打开内存文件”中读取字节集时只能读取四个字节的BUG。
4、修改“到全角”和“到半角”对于字符\/不转换的BUG。
1.3.3版(2009年9月26日)
修改“取随机数”命令有数值范围时固定不变的BUG。
1.3.2版(2009年9月10日)
修改“取随机数”命令有时出现负数的BUG。
1.3.1版(2009年8月23日)
修改“到全角”和“到半角”命令与核心库原命令有差异的BUG。升级“黑月资源编辑器”版本为2.2.0.3b。增加可视化窗体设计时对中文字体的支持,增加“超级链接框”控件(SysLink)。
1.3.0版(2009年8月16日)
修改“清除数组”命令导致程序出错的BUG。
1.2.2版(2009年8月15日)
修改“到文本”和“信息框”命令成转换自定义类型成员为字节型和短整数型时不正确的BUG。修正写磁盘文件命令比易原命令慢的问题。
1.2.1版(2009年8月10日)
修改DLL函数名长度超过50字节和函数名有部分相同时不能编译的BUG。
1.2.0版(2009年8月6日)
支持调试(按黑箭头或F5)有PE资源的黑月程序(比如用资源对话框模板创建的窗口)。注意:调试必须支持自动处理和源码有RC脚本文件
1.1.5版(2009年8月6日)
修改在WIN7系统下使用有返回数组命令(如“分割文本()”)后出错的BUG。
1.1.4版(2009年8月4日)
兼容斩月源码,修改文本常量过多时出错的怪异问题。
1.1.3版(2009年8月4日)
修改“寻找文件”未找到文件时,退出程序时出错的BUG。
1.1.2版(2009年8月1日)
修改“到小数”返回值不正确的BUG。
1.1.1版(2009年8月1日)
修改“信息框”返回值、“文本替换”和“字节集替换”与核心库原命令有差异的BUG。
1.1.0版(2009年7月31日)
1、修改VISTA和WIN7系统,从工具菜单打开资源编辑器时出错的毛病。(感谢番茄提供解决办法)
2、增加媒体播放类命令“播放MID”。(感谢dtcser提供源码)
3、支持__cdecl调用方式的外部函数。
4、支持编译链接由C语言或汇编编写的静态库(LIB),做为黑月功能扩展。
5、开放链接器LINK.EXE的编译参数,可以定义生成特殊功能的程序。
|
|