This commit is contained in:
lenheart
2024-09-17 11:41:25 +08:00
parent d13c88c119
commit dccbde868e
20 changed files with 281 additions and 105 deletions

View File

@@ -210,6 +210,18 @@ static SQInteger L_ReadAddress(HSQUIRRELVM v)
sq_pushinteger(v, *(int *)Address);
return 1;
}
// 读内存
static SQInteger L_ReadPoint(HSQUIRRELVM v)
{
// 内存地址 int型
SQUserPointer Address;
// 获取地址
sq_getuserpointer(v, 2, &Address);
int *ptr = reinterpret_cast<int *>(Address);
int value = *ptr;
sq_pushuserpointer(v, (void *)(value));
return 1;
}
// 读内存字符串
static SQInteger L_ReadAddressString(HSQUIRRELVM v)
{
@@ -594,6 +606,17 @@ static SQInteger L_Str_Ptr(HSQUIRRELVM v)
sq_pushuserpointer(v, (void *)str);
return 1;
}
static SQInteger L_Ptr_Operation_A2S(HSQUIRRELVM v)
{
// 内存地址 int型
SQUserPointer Address;
// 获取地址
sq_getuserpointer(v, 2, &Address);
SQInteger Offset;
sq_getinteger(v, 3, &Offset);
sq_pushuserpointer(v, (void *)(Address + Offset));
return 1;
}
static SQInteger New_Point(HSQUIRRELVM v)
{
@@ -611,6 +634,25 @@ static SQInteger Delete_Point(HSQUIRRELVM v)
return 0;
}
static SQInteger Sq_getExportByName(HSQUIRRELVM v)
{
const SQChar *MoudleName;
const SQChar *FuncName;
sq_getstring(v, 2, &MoudleName);
sq_getstring(v, 3, &FuncName);
void *handle = dlopen(nullptr, RTLD_LAZY);
if (!handle)
return 0;
void *targetFunctionPtr = dlsym(handle, FuncName);
if (!targetFunctionPtr)
return 0;
sq_pushuserpointer(v, targetFunctionPtr);
return 1;
}
static void RegisterGame(HSQUIRRELVM v)
{
@@ -622,6 +664,8 @@ static void RegisterGame(HSQUIRRELVM v)
register_World_func(v, L_S_Ptr, _SC("S_Ptr"));
register_World_func(v, L_Str_Ptr, _SC("Str_Ptr"));
register_World_func(v, L_Ptr_Operation_A2S, _SC("Ptr_Operation_A2S"));
// new一个指针
register_World_func(v, New_Point, _SC("Sq_New_Point"));
// 销毁一个指针
@@ -633,6 +677,8 @@ static void RegisterGame(HSQUIRRELVM v)
register_World_func(v, L_WriteAddress, _SC("Sq_WriteAddress"));
// 读地址int
register_World_func(v, L_ReadAddress, _SC("Sq_ReadAddress"));
// 读地址Point
register_World_func(v, L_ReadPoint, _SC("Sq_ReadPoint"));
// 读地址字符串
register_World_func(v, L_ReadAddressString, _SC("Sq_ReadAddressString"));
// 读取Byte
@@ -656,4 +702,5 @@ static void RegisterGame(HSQUIRRELVM v)
register_World_func(v, L_CallFunc, _SC("Sq_CallFunc"));
register_World_func(v, Sq_getExportByName, _SC("Sq_getExportByName"));
}