# x2lib
**Repository Path**: aas102400/x2lib
## Basic Information
- **Project Name**: x2lib
- **Description**: 一个C++基础库
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2022-04-21
- **Last Updated**: 2022-05-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### x2lib是什么
x2lib(原名[xlib](https://github.com/fakerXue/xlib),已弃用)是我个人自2016年以来形成的一个跨Linux和Window的C++基础库,封装了一些常用的C++操作,可分为工具类、工具函数、及框架。自2015年年底入行C++后,一直热衷于研究网络和逆向技术,因此业余时间总喜欢做一些相关的小工具,后来做的多了,发现经常会写一些重复代码,因此萌生了创建一个基础库的想法,x2lib因此诞生。起初只为了服务于个人项目Pocket,这是一个涉及网络和逆向工程套件。后来发现x2lib不仅对Pocket有用,在工作中也经常有机会用到,因此将其剥离出来,并进行了跨平台适配,目前已可以使用vs2019的CMake工程进行 跨平台 编译。
### 代码出处
+ 轻量的第三方开源库:有改动,以便跨平台或支持C++编译,后文有介绍。
+ 网络搜集并加以优化。
+ 基于学习和经验自创:主要位于x2lib/路径,除x2lib/open/depends路径。
其中自认为设计的比较好的有:AppLoad, DbgUtil, ISingleton, MemJson, Msger, Transceiver,当然仍然有很多不足之处,也希望各位大侠能在issue提供建议和反馈。
*另外还有部分源码涉及安全问题,暂未开源。*
### 主要模块
* `AppLoad`:模块加载类(框架)。抽象类,用于多模块应用启动时规范化子模块的加载,可实现异步、同步、串行加载。
* `CrypUtil`:简易加密类。如:md5,base64,异或加密,增强型异或加密。
* `DbgUtil`:日志打印。信息详细,支持文件输出、控制台输出、回调输出,支持多线程,支持按级别输出。
* `FileUtil`:文件操作。一般的文件操作:读写、多级目录创建/删除、文件遍历等。
* `HttpUtil`:简易Http。http访问,http文件下载,有较大不足,不推荐使用,推荐使用附带的httplib(支持ssl)。
* `ISingleton`:模板单例(框架)。提供初始化/反初始化时机,使用可变参数提供自定义初始化。
* `MemJson`:内存Json。一种紧凑型内存结构,完美兼容标准json。
* `MixPool`:资源池。基于MemJson,我用来做资源加密的,将资源放在服务端,动态获取到本地端,通过lock/unlock使用,有效增加破解难度。
* `Msger`:订阅器(框架)。支持同步/异步/阻塞消息,推荐使用提供的消息宏定义消息。
* `ProcPiper`:管道封装。基于Transceiver框架,支持多个客户端连接一个服务端,使用异步模式收发数据,支持断线重连。
* `SqliteDB`:Sqlite3封装。基于sqlite3.1和sqlcipher,多线程安全,支持ssl加密,最大亮点是提供了一个数据库自动升级接口。
* `StrUtil`:字符串工具。常规操作:unicode/ansi/utf8互转,数字字符串互转,Trim,简易哈希,Format,Split等。
* `SysUtil`:系统工具类。时间获取/格式化,软件版本号设置/获取/比较,生成GUID/随机数,等。
* `TaskRunner`:任务机。支持串行、并行、延时、循环、跳转、任务卸载、事件通知,实用性不强,有待优化。
* `Transceiver`:通用收发器(框架)。一个基于通道理念的通信框架。可用于实现各种通信(比如管道、Socket、文件等)。
* `xCores`:多线程。互斥锁、信号量、消息泵、线程引擎等,正考虑是否用C++11替代。
* `xUtils`:杂函数(类)。暂未归类的函数、类,比如lambda2func:可将带捕获的lambda转为静态函数使用。
* `ZipUtil`:Zip封装。基于unzip实现,提供了一些便捷接口,如内存解压缩,添加/移除压缩项等,有已知bug待优化。
* `extra/`:MFC相关类。早期实现的一些辅助类,后续可能会删除。
* `其他`:其他未介绍的类不推荐使用,后续可能会删除。
* `httplib`:一个极简http库,只有一个头文件,支持https。
* `movcrypto`:一个集合各种常用加密的开源库,如aes,des,md5,sha1,base64等。
* `sqlite3xx`:原名sqlcipher,支持ssl加密的sqlite3。【官方基于openssl,已被我改为基于wolfssl】
* `tinyxml2`:轻量xml解析库。
* `wolfssl`:轻量版的openssl,可用于嵌入式开发。【已经修改用于适配sqlite3xx】
* `cJSON`:一个纯C编写的json库。【略微改动】
* `cmdline`:解析命令行格式文本的库。
* `unzip`:zip解压缩库。【官方版只支持windows,已被修改适配linux】
### 代码规范
* `尽可能的遵循这篇博客:[个人编码习惯](https://blog.csdn.net/xk641018299/article/details/121408129)
### 未来计划
目前有很多已知的问题和不足,但由于精力有限,我只能后续抽空逐步优化,但也正如我的学习过程一样,我希望这个库更多的是能给使用者提供一个思路,在使用的同时将其吸收,然后再创作出属于自己的代码。
我还不确定这个项目是否对各位有用,但如果有兴趣的话,期望能参与进来一起维护。
### QQ群交流
* `1001680502