Nambers / MiraiCP

c++ SDK of Mirai

Home Page:https://eritque-arcus.tech/MiraiCP/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

libloader与插件端的内存手动对齐

Antares0982 opened this issue · comments

功能描述

在插件和libloader对接时,加一个检查两边sizeof(void*)是否相等

原因

之前用标准库数据结构进行数据交互,导致各种未定义行为。例如,msvc编译器下,std::string在debug x64环境的大小是40,在release x64下是32(导致的问题例如: #119,release和debug版本的libloader与插件不能混用)。于是,在出现数据交换的地方我们将需要全部使用整型,如指针类型、int、long等。

为了保证加载时不再产生这类问题,我们至少需要保证两边的指针长度相同(也可能按情况增加int、long等长度检查),如都是4位或者都是8位,如果不相同libloader将输出日志以让用户了解到底发生了什么问题。目前考虑仅支持在64位编译,之后可能会添加32位的支持。

组件选择

loader

我想了想,还是这样子吧,检测libloader和插件是不是同为64位或者同为32位(32位可能会和jvm那边有些对接问题,麻烦 @Nambers 测试一下这个,用32位jvm),如果不是的话报一条log然后拒绝加载。如果是同位数的话就直接假设长度是当前位对应长度来读数据。

32位支持打咩 🫤

32位支持打咩 🫤

有人有64位洁癖,但我不说是谁😆

额外要求sizeof(char)==1,一般来说都会满足