Arrays 忽略GML中的数组越界错误

Arrays 忽略GML中的数组越界错误,arrays,game-maker-studio-2,game-maker-language,Arrays,Game Maker Studio 2,Game Maker Language,我肯定这是一个非常奇怪的问题,但相信我,这是有道理的。我有一个GameMaker语言中的值数组,我希望能够搜索数组中超出数组边界的值,并检索那些超出边界的值,而不是返回错误并停止游戏。基本上,在使用越界索引搜索数组时,我希望故意从附近的内存中提取不正确的数据。这可能吗? 提前谢谢你 但相信我,这是有道理的 提及你为什么想做某事是很好的,这样,如果做不到,可以在没有后续问题的情况下给出建议 GameMaker不允许无效的内存访问(除了外来的bug),尽管即使它允许,也会有更多的问题-如果您检查YY

我肯定这是一个非常奇怪的问题,但相信我,这是有道理的。我有一个GameMaker语言中的值数组,我希望能够搜索数组中超出数组边界的值,并检索那些超出边界的值,而不是返回错误并停止游戏。基本上,在使用越界索引搜索数组时,我希望故意从附近的内存中提取不正确的数据。这可能吗? 提前谢谢你

但相信我,这是有道理的

提及你为什么想做某事是很好的,这样,如果做不到,可以在没有后续问题的情况下给出建议

GameMaker不允许无效的内存访问(除了外来的bug),尽管即使它允许,也会有更多的问题-如果您检查YYGML.h(在运行时目录中),GML值由
struct RValue
表示,这是一个由8个值字节组成的16字节结构(例如数值、字符串指针、数组指针等),值类型索引和元数据标志。换句话说,尝试将任意内存作为GML值读取将不起作用,因为类型和标志都将是垃圾,很可能在命中指向无效内存位置的指针类型的值时导致运行时因访问冲突而崩溃

如果要读取进程中的任意内存,可以编写一个本机扩展(通常使用C++),该扩展带有一个函数,该函数接受缓冲区地址(从
buffer\u get\u address
)、起始地址和长度,通过调用
VirtualQuery
将字节复制到缓冲区(验证内存区域是否可访问并检索边界),然后
memcpy

此类函数的非GML特定实现可能如下所示:

bool safeCopy(字节*输出,常量字节*起始,大小){
const auto pmask=PAGE_READONLY | PAGE_READWRITE | PAGE_WRITECOPY | PAGE_EXECUTE|
PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY;
自动at=从;
自动整平=at+尺寸;
::存储器基本信息mbi{};
while(attill)m_end=till;
如果(m_begin