检查我是否可以写入内存

Check if i can write to memory

我有一个访问特定内存并写入的代码 :

*addr = _data;

但有些情况下,addr变量可以指向不可访问的内存,无法读取或写入(例如,nullptr ).在这种情况下,不应执行上面的代码。问题是,如何检查 addr 中的内存地址是否有效?我了解到我无法捕获 访问冲突异常 ,我也无法使用 IsBadReadPtr WinAPI 函数,因为它基本上是无用的。我应该如何检查这种情况?

使用VirtualQuery获取页面保护,查看指针指向的区域是否可写。

但请注意,这不应该用来掩盖糟糕的设计。确保所有指针和引用在使用时都有效。

如果你想知道一个地址是否可写,写信给它。将代码包装在 SEH 处理程序中,然后从那里获取它。

您无法可靠地查询可写性(使用 VirtualQuery, for example), since your process' address space is in constant flux. Doing so introduces a TOCTOU race