本帖最后由 850536360 于 2022-7-10 23:27 编辑
尝试从GO编译C静态库,编译Sunny中间件支持库
接上一帖:尝试从GO编译C静态库,实现易语言静态编译调用GO库
准备工作:
Sunny中间件源码:http://esunny.vip/ 或者 https://gitee.com/ouyang-yiluo/sunny-mitm
Sunny中间件易语言 模块源码: http://esunny.vip/
Sunny抓包工具源码: http://esunny.vip/
中间件源码、中间件模块和抓包工具源码,要使用同一个版本,让其接口一致。
易语言中间支持库源码:https://gitee.com/ouyang-yiluo/epl_lib_sunny_mitm
GO编译环境
VC6编译环境
易语言
构建C静态库
下载Sunny中间件源码,在Sunny中间件源码目录新建 build_c_archive_x86.bat
。
# build_c_archive_x86.bat
set CGO_ENABLED=1
set GOOS=windows
set GOARCH=386
set ProjectName=sunny_mitm
set ProjectOutDir=%~dp0bin\windows\%ProjectName%\x86\
set ProjectOutPath_Lib=%ProjectOutDir%%ProjectName%.a
go build -buildmode=c-archive -ldflags "-s -w" -o "%ProjectOutPath_Lib%"
pause
gitee里的版本自带 build_c_archive_x86.bat
运行 build_c_archive_x86.bat
批处理来构建C静态库。
构建易支持库
在 中间件源码目录\bin\windows
目录复制sunny_mitm
文件夹到易库源码目录\3rdparty
。
打开中间件模块源码,复制DLL命令的源码文本,以此创建sunny_mitm_ec_dll_cmd_src.txt
文件。注意,VC6老旧,不支持UTF-8,编码要转为ANSI。
打开gen_h.e
, 运行以此生成 gen.h·
文件。
如果遇到生成暂停,看下面的错误处理1。
运行build_Release.bat
或者打开sunny_mitm.dsw
手动构建。可以从Release
目录找到 sunny_mitm.fne
和sunny_mitm_static.lib
。
#build_Release.bat
#MSDEV.EXE路径改为自己安装路径
set MSDev98="D:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEV.EXE"
call %MSDev98% sunny_mitm.dsw /MAKE "sunny_mitm - Win32 Release" /REBUILD
call %MSDev98% sunny_mitm.dsw /MAKE "sunny_mitm_static - Win32 Release" /REBUILD
pause
安装易库: sunny_mitm.fne
复制到 易语言目录\lib
;sunny_mitm_static.lib
复制到 易语言目录\static_lib
;
改造中间件模块
屏蔽_启动子程序
里面的Sunny.dll
文件检测。
删除Sunny.dll
相关的DLL命令
启用支持库,易语言IDE菜单栏->工具->支持库配置,选上sunny_mitm
。
易语言IDE不会自动转换,手动解决Dll命令名称未找到(前提是支持库有同名的命令):
F5测试
全选代码
屏蔽代码
全选代码
解除屏蔽
如果个别不行,在命令后面回车,再删除回车。
回到1,直到F5成功。
编译出模块。
测试模块: 打开抓包工具源码,载入模块后, 编译抓包工具。
错误处理
中间件模块的DLL命令返回值类型与参数和GO导出的函数不匹配(已反馈过,但是没见作者修复)。可以修改GO源码,或者修改模块的DLL命令 。以下是修改模块:
文本形式打开 中间件源码目录\bin\windows\sunny_mitm\x86\sunny_mitm.h
文件参照
比如 Sunny_KeysEmpty,返回值类型和参数都不对。
返回值类型,void 表示空类型,但是DLL命令填的是整数型。
参数数量也少了两个,经查看GO源码,这两个参数是没有使用的,DLL命令可以补上整数型参数,再传入0。
Sunny存取键值表->清空()调用改为 Sunny_KeysEmpty (KeysHandle, 0, 0)
其他的也是一样处理,以此类推。
一些效果图
编译成功, 不用Sunny.dll的抓包工具:
upx压缩后的抓包工具文件尺寸大小:
抓包工具运行效果