插件名: 黑月编译器插件
作者: 云外归鸟
网站:
黑月的用途
黑月是类似于斩月,目的是将易语言程序小型化,脱离支持库运行的工具。但实现原理和方法又与斩月不同,不需要类似的斩月壳,而是分析并转化易程序为对象文件obj,再用链接器LINK.EXE重新编译链接。这样生成的黑月程序,具有更规范更优化的PE程序文件结构,并且带来更多的功能扩展(比如使用RC资源脚本生成PE标准资源),以及带来下好处:
1、具有正常的PE可执行文件结构,经过反编译后生成的易程序代码清晰可见,xx呈现。汇编代码可分析可用专用软件跟踪调试,不会再产生误报。
2、在脱离核心支持库的同时,又不废除原有核心库命令,而是转向调用功能类似的黑月核心库。就是说,黑月可以使用大部分的原核心库命令(非窗口操作),并且黑月核心库为本人模仿原核心库功能,再重新编写的静态库。由于黑月先天优势,可以静态库抽取代码片段合成编译,就是用到的命令函数才提取相应部分代码。不用到命令不合成到目标程序。这样的好处是既保持原有功能不变,又不使程序文件大小增加,附带冗余代码。
易友们一直梦想的静态库抽取合成编译,今天在黑月已经实现了!
(黑月支持的核心库命令看随后的附表)
4、黑月可以使用PE标准资源,用RC脚本编译生成。比如使用资源对话框模板创建窗口,并配合可视化的黑月RC脚本编辑器,比斩月又多一种更方便的界面设计功能,而且与汇编和C语言的RC脚本兼容通用,使黑月程序更接近于常规程序。
5、黑月的DLL可以使用类似其它语言DLLMAIN入口函数(黑月为“Dll入口函数”),可以通过DLL的模块句柄访问DLL的PE资源、注入进程、多线程应用等等优点。
6、黑月可以突破易语言自身的限制,实现对__cdecl调用方式函数的支持,并且可以在编译时链接其它由C语言或MASM32汇编语言编写的静态库,这又大大的增强了功能扩展,对众多C语言代码资源的利用,和软件工程的协作开发创造了便利条件。
黑月工具的安装和使用:
为了方便使用,黑月工具是以易语言编辑器的插件形式使用,出现在易编辑器的工具菜单里,与易IDE融合。在易语言编译生成EXE和DLL文件之后,随即自动加工处理,重新编译转化成黑月程序,不用自己选择程序文件(这个自动处理功能,可以通过黑月设置关闭,变为手动选择处理)。
1、下载黑月安装程序之后,双击运行按提示说明,黑月必须安装在易语言安装目录。比如:C:\Program Files\e (e目录下的BlackMoon为黑月主目录,以及LIB里的BlackMoon.fne为支持库插件)
2、安装黑月工具之后,需要在易编辑器菜单->工具->支持库配置,勾选“黑月编译器插件”支持库,如图:
如果没有什么意外,就会立即启动并运行黑月工具
工具菜单出现“黑月工具”和“黑月资源编辑器”菜单选项。
注意:如果勾选“黑月编译器插件”支持库时,易编辑器出错退出。这说明你的系统不支持黑月自动加工处理功能(部份原因是使用了xx版易语言)。
遇到这种情况请自行编辑配置文件,比如:C:\Program Files\e\BlackMoon\BlackMoon.ini
修改配置内容:
[BlackMoon]
Run=0
将禁止自动处理功能,这时再重新启动易编辑器,再次勾选“黑月编译器插件”支持库。但没有自动处理功能很不方便,而且如果要同时编译资源,RC脚本文件路径和名称也需要相应变化,这以后再详细了解。
3、关闭自动处理功能和手动选择处理。易编辑器菜单->工具->黑月工具,将出现黑月的设置窗口,如图:
“启动黑月编译器”选择框决定是否在易语言生成程序之后,自动处理成黑月程序。如果关闭,将不自动加工处理成黑月程序,恢复易编辑器原来的状态和功能。如果上系统不支持自动处理的,勾选这个功能将导致易编辑器出错。
关闭开启这个功能,在易编辑器的输出窗口都有提示:
4、使用和产生PE资源。易编辑器菜单->工具->黑月资源编辑器,将运行资源脚本编辑工具软件,如果当前源码已经保存到文件路径,并且没有与源码相配套的RC文件,将询问你是否创建同名的RC文件。
如果已经创建有了,就会直接打开与源码相关的RC文件,编译时会自动编译RC脚本为PE资源,源码中使用专用API访问PE标准资源。
黑月资源编辑器主要的功能菜单如图所示:
5、黑月程序编写的注意事项:
(1)黑月兼容大部分的斩月程序,斩月源码若在黑月编译后上无法运行,请仔细排查。
(2)黑月程序若使用链接静态库和使用__cdecl调用方式的DLL函数时,则不能调试运行(按F5),只能编译后才能运行(用信息框插入代替断点)。
(3)请将易编辑器的“花指令插入级别”和“编译结果打乱码”关闭(设置为0),这两个功能影响黑月对易程序的分析。
(4)如果使用4.13版本,请将版本信息功能关闭,菜单->程序->配置->({zd2}下选项)去掉选勾。使用黑月自己的资源脚本添加版本信息。否则会破坏生成的黑月程序,出现“不是有效的 Win32 应用程序。”的提示框。
(5)黑月程序只能使用支持的核心库命令和API,不能使用易的窗口及组件和其它支持库,窗体界面用代码和资源对话框生成。
(6)编写非控制台的黑月程序,可以在程序新建内先选择控制台程序(用_启动子程序),然后在“菜单->程序->配置”改成“Windows窗口程序”。