Closed KawaiiNahida closed 2 months ago
NativeAPIs for LLSE is working in progress, this issue is created to track the progress
SymCall
GetAddress
Hook
Patch
关于MC class wrapper有两种实现方案:
使用NativeClass做通用类,储存void*,使用字符串储存实际指针类型,并封装一套通用的API 需要调用具体类型各自的成员方法,在运行时、语言层使用反射拦截非法成员方法请求,并根据储存的当前类型信息查找symbol进行调用 此方案的优点是(相比方案2)不需要手动编写整个生成器轮子,缺点是需要想办法提供symbol查找机制(如在内存中储存一份数据库等)
在脚本层实现整个继承体系,每个类分文件并使用脚本语言自身的include机制进行互相引用,最后在脚本层调用symcall实现call 此方案的优点是CPP层完全不需要设计任何接口,仅需基础hook symcall接口即可 缺点是性能暂时不明有待测试,另外需要手动设计编写生成器,从originalData(或AST)起手,生成统一的接口声明语言(如TS声明),再由此生成各种语言的接口定义文件。目测无相关轮子,需要全部自行实现
如果选择方案2,生成器可以作为单独项目开发,而且生成器结果也可以为补全插件所用
Is your feature request related to a problem? Please describe.
NativeAPIs for LLSE is working in progress, this issue is created to track the progress
Describe the solution you'd like
SymCall
api to call an native function by function signature or addressGetAddress
api to get function Address by signatureHook
api to hook function by function signature or addressPatch
api to patch a specific areaWrap STL class 技术路线
Wrap MC class & 自动 Binding 技术路线
关于MC class wrapper有两种实现方案:
使用NativeClass做通用类,储存void*,使用字符串储存实际指针类型,并封装一套通用的API 需要调用具体类型各自的成员方法,在运行时、语言层使用反射拦截非法成员方法请求,并根据储存的当前类型信息查找symbol进行调用 此方案的优点是(相比方案2)不需要手动编写整个生成器轮子,缺点是需要想办法提供symbol查找机制(如在内存中储存一份数据库等)
在脚本层实现整个继承体系,每个类分文件并使用脚本语言自身的include机制进行互相引用,最后在脚本层调用symcall实现call 此方案的优点是CPP层完全不需要设计任何接口,仅需基础hook symcall接口即可 缺点是性能暂时不明有待测试,另外需要手动设计编写生成器,从originalData(或AST)起手,生成统一的接口声明语言(如TS声明),再由此生成各种语言的接口定义文件。目测无相关轮子,需要全部自行实现
如果选择方案2,生成器可以作为单独项目开发,而且生成器结果也可以为补全插件所用