分类
工具源码

易语言命令行编译工具 ecl v1.2.4.1(beta)

前言

  顾名思义,本工具的作用就是通过命令行来编译易语言源码。

  但也并非是独立的编译器,依然需要依赖易语言程序,只是不会显示易语言IDE窗口。从打开源码到完成编译,包括处理各种错误都由命令行工具自动完成。

  有了这个命令行工具就可以实现全自动化构建和部署。

  此工具目前处于测试阶段,有任何问题和建议的话,欢迎反馈!

  注意:此工具并不会绕过易语言正版检测,需要使用正版易语言才能完成编译。

易语言命令行编译工具 ecl v1.2.4.1(beta)

易语言命令行编译工具 ecl v1.2.4.1(beta)

命令行说明

set epath "EPATH"
  设置默认易语言路径
  如: ecl.exe set epath "C:\Program Files (x86)\e\e.exe"
  
make Source [Target] [-epath path] [-bm|-bmX|-s|-d] [-b*Fg config] [-bmdes description] [-p password] […]
  编译源码
  Source 源码全路径,如:"C:\test.e"
  Target 保存文件,如:"C:\Release\test.exe",可空,默认生成到源码所在目录,文件名与源码相同
  -epath 指定易语言路径,若不指定易语言路径,则使用默认易语言或自动寻找
    如: ecl.exe make "C:\test.e" -epath "C:\Program Files (x86)\e\e.exe" -s
  -bm 黑月编译:
    -b*Fg 配置名称,可空,黑月4.0版本以上才有效
    -bmdes 特定备注,可空,黑月4.0版本以上才有效
  -bm0 黑月汇编模式编译(黑月3.8及版本以下才有效,否则按-bm处理)
  -bm1 黑月C++模式编译(黑月3.8及版本以下才有效,否则按-bm处理)
  -bm2 黑月MFC模式编译(黑月3.8及版本以下才有效,否则按-bm处理)
  -s  静态编译
  -d  独立编译
  -p  编译易包
  -pwd  源码密码
  -lib  启用的支持库文件名,不要加后缀.fne,多个支持库用;分号分隔
    如: -lib "BlackMoon;spec"
  -e_xxx  指定易语言link.ini配置项的内容,xxx代表配置项名(但不会实际地修改该文件,只是用来告知易语言)
    如:-e_linker "\VC98linker\Bin"
  -k  执行完毕后,此命令行工具不会立即退出
  -show  显示易语言窗口
  -st  启用易语言超时,单位秒,默认5分钟
  -ct  编译超时,单位秒,默认10分钟
    如: -ct 600
    
  下面是易语言的系统配置:
  -FastArry 开启快速数组访问方式(不开启为-FastArry-,默认不开启)
  -CheckDllStack 开启调用DLL命令后检查堆栈错误(不开启为-CheckDllStack-,默认开启)
  -CheckLoop 开启死循环代码检查(不开启为-CheckLoop-,默认开启)
  -Windows6.0 使用Windows通用组件库6.0版(不使用为-Windows6.0-,默认不使用)
  -OutLib 非独立编译后写出相关库(不写出为-OutLib-,默认不写出)
  -CheckName 开启严格的重复名称检查(不开启为-CheckName-,默认不开启)
  -JunkLevel 花指令级别,默认0不插花,最大值为3
    如:-JunkLevel 3
  -Upset 编译结果打乱码,默认0不打乱,随机打乱为0xFFFFFFFF
    如:-Upset 0xFFFFFFFF

  示例1(普通编译):
    ecl.exe make "C:\test.e"

  示例2(指定易语言路径进行静态编译):
    ecl.exe make "C:\test.e" -epath "C:\Program Files (x86)\e\e.exe" -s

  示例3(使用黑月编译并指定配置名称):
    ecl.exe make "C:\test.e" -bm -b*Fg "默认配置"

  示例4(编译带密码的源码):
    ecl.exe make "C:\test.e" -pwd "The Password"

  示例5(编译文件保存到C:\test.exe):
    ecl.exe make "C:\test.e" "C:\test.exe"

@文件路径 从文件中指定命令行
  如:ecl.exe @test.txt
    test.txt的内容可以为:make "C:\text.e"
    test.txt中的不同参数间可以用换行符分隔


错误代码列表:
#define ECL_ERROR_SUCCESS                1  //处理成功
#define ECL_ERROR_OK                     0  //未发生错误
#define ECL_ERROR_UNKNOW                -1  //未定义类型的错误
#define ECL_ERROR_PARAM                 -2  //命令行有错误
#define ECL_ERROR_FILENOTFOUND          -3  //找不到文件
#define ECL_ERROR_FILEINVALID           -4  //文件无效
#define ECL_ERROR_COMPILE               -5  //编译失败
#define ECL_ERROR_INVALIDCOMPILETYPE    -6  //不支持的编译类型
#define ECL_ERROR_ECANNOTSTART          -7  //无法识别或无法运行的易语言程序
#define ECL_ERROR_CANNOTGETMENU         -8  //无法获取易语言菜单 
#define ECL_ERROR_SHUTDOWN              -9  //易语言意外结束
#define ECL_ERROR_STATIC                -10 //静态编译失败
#define ECL_ERROR_MAKELINKINI           -11 //生成link.ini文件过程中出错
#define ECL_ERROR_BMINFO                -12 //老版黑月的相关xx无法定位
#define ECL_ERROR_BMCOMPILE             -13 //黑月编译失败
#define ECL_ERROR_PASSWORD              -14 //源码密码不正确
#define ECL_ERROR_EC                    -15 //缺乏易模块
#define ECL_ERROR_ELIB                  -16 //缺少支持库
#define ECL_ERROR_STARTTIMEOUT          -17 //启动易语言超时
#define ECL_ERROR_COMPILETIMEOUT        -18 //编译超时
#define ECL_ERROR_NOTSUPPORTEPK         -19 //不支持易包编译

分类
脚本专栏

某破解版易语言或存在后门

众所周知,黑月编译器插件最近两年都是本人负责升级和更新。

所以经常能收到各种各样的反馈。

而最近一段时间收到大量的反馈,黑月无法识别易语言程序!

我当时也是一头雾水,所以我在自己的电脑上测试了一下,不管是远古的4.13/5.11等版本,还是最新5.92版本,黑月均能正常处理,即便更换了不同的系统,得到的结果都是一样的。而给我反馈此问题的易友均是使用了非正版的易语言,并且重装易语言后都能有效地解决问题。至此,基本可以排除黑月出现BUG的可能。

起初我怀疑是易友的电脑中毒导致的,因为易语言普通编译的EXE仅为6KB-8KB,而出现问题的易友的易语言编译出来的EXE程序居然高达80KB,所以我就远程了部分易友电脑,但没有发现任何中毒迹象。也仅有此PJ版易语言生成的程序出现了体积异常的情况,当我在我的测试机上安装了此PJ版易语言后也出现了相同的症状。

也就引发了我的一些猜想,

黑月编译器插件的原理是解析易语言普通编译所生成的EXE或DLL,提取其中的资源与代码,重新封装打包,采用独特的静态链接方法,生成精简且高效的程序,因此深受广大易友喜爱。

而黑月在出现上述反馈问题的易友电脑中,还未到达打包阶段,在解析过程中就出现了异常,目标程序已经不是易语言所生成的原生程序,程序的PE结构无法被黑月所识别。而该版本易语言在我电脑上或其他易友电脑上,都能正常识别,说明易语言本身并没有对结构进行过改动。

那么,易语言没有修改程序结构,电脑也没有中毒,会是谁修改了易语言的编译结果呢?

此时大家能联想到的,应该也就跟我一样:破解补丁对易语言的编译结果进行了修改。

一些破解补丁为什么要在易友不知情的情况下修改编译结果呢?其目的必然是见不得人的。大家可以回忆一下,之前上了央视新闻的那个供应链感染事件,相信会得一些结论。

由于本人的逆向水平有限,并未能在其中发现端倪,目前也没暴露出什么问题,但我还是要提醒各位多留点心眼,为了自己和客户的权益,不得不防。即便你认为没有什么权益可以被侵犯,你也没有什么商业作品,也不能让一些不法份子的见不得人的目的得逞。

最有效的办法就是购买正版易语言,价格是六百来块,对于学生党来说可能并不友好,但如果不需要售后服务,价格还能低很多。我第一只狗购买到现在已经十年有余了,一直在用着,平均一天就一毛钱多,而且估计还能再用几年,到时平均一天一毛钱都不用。而且如今已不是当年,大家都已经摆脱了当年的贫困状态,绝大多数人的一个多月的烟钱或一周的工资都能买到。不说用正版有多自豪,最起码自己用得放心,用得安心,避免不必要的烦恼。

在此声明,我没有受到易公司或吴涛的指使,也未收到任何好处。我只是把自己的真心话跟大家讲讲而已。

以上内容的结论部分,因为没有实锤的证据,就不公布这些补丁的名称了,就当成是我个人的臆想。疫情期间自我隔离在家一个多月了,相当无聊,于是想上来水个帖子。如果与实际不符,大家当个笑话看看就好。

分类
工具源码

黑月编译器插件核心静态库开源

黑月编译器插件主要分为两部分:

1.核心静态库(即krnln.lib,核心支持库函数的实现代码)

2.重编译器(给编译后的程序替换核心库)

此次开源的是核心静态库那一部分的源码,已经得到了云外归鸟的同意。

重编译器部分源码则暂时没有开源计划。

源码的下载及开源项目地址:

https://github.com/zhongjianhua163/BlackMoonKernelStaticLib 

此次开源的目的是让更多有兴趣和有能力的人一起来优化黑月和修复BUG。

毕竟,从大鸟到彬哥,再到我手,黑月经历了数次升级,至今仍存在一些不足,

而我工作烦忙,再加能力有限,一些BUG迟迟不能修复,

比如COM对象这一块,虽然问题大多出在开发者并没有正确使用而导致的,

但黑月本身不能完全跟易实现一模一样的效果也是原因之一。

所以,有兴趣的人,可以去研究一下。

开源的相关事项,已经写在readme.txt中了,可以前往开源地址中查看。

更新日志:

3.6.7.2版本(2019年12月16日)

1、修复 到长整数() 提供空文本时返回值不正确的问题。(感谢 抹語、淚先℡流 的反馈)

2、修复 倒找文本() 当起始位置前一个字符为汉字的时候返回值有可能不正确的问题。

3、修复对象的方法或属性在提供多余的空参数时会崩溃的问题。(感谢 你凌哥i 的反馈)

4、修复 置错误提示管理() 无法捕获DLL文件或函数不存在的错误提示的问题。(感谢 Wiley 的反馈)

5、修复 到字节() 不能正确转换逻辑值的问题。(感谢 船长 的反馈)

分类
易语言支持库

黑月编译器插件v3.6.6

更新日志:

3.6.6版本(2018年12月30日)

1、编译时自动带入静态库所需的RES资源。用于兼容E2EE等支持库。(感谢 神2 提供的技术支持)

2、修复重定向项目超过65535后无法正常运行的问题。(感谢 人 生 提供的技术支持)

3、修复取命令行()不能正确解析命令行的问题。(感谢 小黑 的建议)

4、修复RC资源编译器错误,支持256x256PNG压缩格式图标文件。(感谢 泪闯天涯(邓学彬) 的建议)

5、黑月资源脚本编辑器增加开启UAC请求(请求管理员权限)选项。

6、增加用户自定义链接参数配置。

7、增加用户自定义链接器配置。

  第6、7条更新的详情请在更新完毕后查看:易语言目录\BlackMoon\BlackMoon.ini

8、兼容易语言的LIB命令声明方式,库文件名直接写lib的文件名而不需要改成“静态库”了。

   常规stdcall调用约定的函数名格式为:  _xxxx@xx (即:_函数名@参数数量*4 如:_strlen@4)

   常规cdecl调用约定的函数名格式为:   @_xxxx (即:@_函数名 如:@_strlen)

   老版本黑月的声明方式也兼容。

9、更正黑月程序向导的DLL模板中的DLL入口函数“不需要公开”的错误描述,改为“必须公开”。

10、修复黑月对象.读文本属性()和对象.文本方法()在部分情况下没有返回值的问题。(感谢 Ali 的反馈)

11、增加黑月对象的方法和属性自动适配判断,兼容易语言写法。(感谢 雷破天 心冷、鱼儿 CSジ蓝ゞ宇  的反馈)

12、修复黑月对象提供了变体型,在返回时变体型会被清空的问题。(感谢 你凌哥i 的反馈)

13、修复快照()命令截图的位置不正确的问题。

14、增加对 打开加密文件() 命令的支持。(感谢 东灿 Lim 分享的算法)

15、提升下面命令的效率:

    1) 读入文本

    2) 读入一行

    3) 读入数据

黑月编译器插件v3.6.6

分类
易语言支持库

黑月编译器插件v3.6.5[更新:2018-10-20]

3.6.5版本(2018年10月20日)

1、修复延时命令提供负数会无限等待的问题。

2、再次提升取文本长度的效率(感谢 落 提供的算法)

3、再次提升所有需要复制和清零内存的函数的效率。

4、增加对易语言5.81新增的五个命令的支持:

   文本到UTF8、UTF8到文本、取字节集内整数、置字节集内整数、反转整数字节序

3.6.4版(2018年8月15日)

1、修复取文件时间命令在文件被独占时获取失败的问题。(感谢船长的反馈)

2、修复取文件尺寸命令在文件被独占时获取失败的问题。

3、修复删首尾空命令在尾部有汉字时返回值乱码的问题。(感谢草泥马2010反馈)

4、修复删尾空命令在尾部有汉字时返回值乱码的问题。

黑月编译器插件v3.6.5[更新2018-10-20 (1).jpg

分类
易语言支持库

黑月编译器插件v3.6.3[更新:2018-7-28]

资源介绍:

更新日志:

3.6.3版(2018年7月28日)

1、修复指针到文本\指针到字节集传入空指针会崩溃的问题。

3.6.2版(2018年7月26日)

1、修复3.6.0版本子文本替换命令会崩溃的问题。

3.6.1版(2018年7月25日)

1、修复3.6.0版本到小写\到大写命令转换出错的问题。

资源作者:

资源界面:

黑月编译器插件v3.6.3更新2018-7-28 (1).jpg

资源下载:

分类
易语言支持库

黑月编译器插件v3.6.1(更新:2018-7-25)

资源介绍:

3.6.1版(2018年7月25日)

修复3.6.0版本到小写\到大写命令转换出错的问题。

3.6.0版(2018年7月24日)

1、修复非控制台程序调用标准输出()后会进入死循环的问题。(感谢帝霸金七的反馈)

2、增加 取最后错误() 的支持。

3、增加 置错误提示管理() 的支持(感谢些似提供的技术支持)。

4、增加 取操作系统类别2() 的支持。

5、增加 取统一文本() 的支持。

6、增加 取统一文本长度() 的支持。

7、增加 运行控制台程序() 的支持。(感谢些似提供的帮助)

8、显著提升以下命令的效率:

1)寻找字节集()

2)倒找字节集()

3)取文本长度() (感谢鱼鱼鱼鱼児提供的建议)。

4)倒找文本()

5)寻找文本()

并规避了易语言寻找文本命令的起始位置参数有可能导致待寻找文本存在但却返回-1的BUG。

如:寻找文本("你我他他他他","他",2,假) ' 易语言会返回-1。

最新黑月的处理办法是当起始位置卡在汉字中间时,起始位置自动+1。

汉字处理逻辑与易语言一致并未发生变化,请大家放心使用。

6)取代码()

7)到小写()

8)到大写()

9)近似等于()  : 例: 如果("abcdefg" ≈ "abc")

10)删首空()

11)删尾空()

12)删首尾空()

13)删全部空()

14)取文本中间()

15)取文本右边()

16)指针到文本()

17)文本替换() :并使替换结果与易语言保持一致。

18)字节集替换() : 并使替换结果与易语言保持一致。

19)子字节集替换()

20)子文本替换()

21)取空白文本()

22)分割文本()

23)分割字节集()

9、微量提升以下命令效率:

1)到全角()

2)到半角()

3)取当前目录()

4)取配置节名()

5)取文本左边()

6)指针到字节集()

7)取重复文本()

8)到字节集()

9)到时间()

10)其他需要重新分配内存的命令

11)其他文本处理命令

本次更新所有优化均使用纯C语言代码实现,未使用任何内联汇编。

3.5.6版(2018年7月16日)

  1、增加对易5.8版本的错误定位功能的支持(感谢些似提供的方法)

3.5.5版本

  1、修复开启黑月编译后易IDE崩溃的问题。

  2、修复目的路径为盘符根目录时会编译失败的问题。

3.5.4版本

  1、修复编译EXE时会重复编译两次的问题。

资源作者:

资源下载:

分类
易语言支持库

黑月编译器插件支持库v3.5.6

资源介绍:

更新日志:

3.5.6版(2018年7月16日)

  1、增加对易5.8版本的错误定位功能的支持(感谢些似提供的方法)

资源作者:

资源下载:

分类
易语言支持库

黑月编译器插件v3.5.5

资源介绍:

一、必须解压安装到你的易语言安装路径,比如:C:\Program Files\e

二、在工具->支持库配置 里把黑月编译器插件选上

三、在工具菜单就出现黑月工具了,点击黑月资源编辑器,可以给程序增加资源脚本。

四、用4.13版最好把易的加入版本信息关了,用黑月自己的资源脚本来生成。否则在没资源的情况下,会破坏黑月编译出来程序。运行时出现不是有效WIN32程序的错误提示。

五、若需要黑月链接编译其它支持库,必须安装易语言5.0以上版本。

[被封七号升级记录]

3.5.5版本

  1、修复开启黑月编译后易IDE崩溃的问题。

  2、修复目的路径为盘符根目录时会编译失败的问题。

3.5.4版本

1、修复编译EXE时会重复编译两次的问题。

资源作者:

资源下载: