【发布时间】:2014-06-11 20:54:25
【问题描述】:
我正在编写一个带有黑盒库的接口(称为“A”),并且需要将void* 分配传递给它。我想用来自其他两个库的两个单独的分配(称为“X”和“Y”)来支持这个分配,将所有写入复制到两个分配中。本质上,我想将所有写入“分叉”到两个现有的 VA 范围。诀窍是这些分配可能非常大,但只有几个字节稀疏地写入,因此复制整个分配不是一种选择。目前,我正在使用write-watch memory 和我自己创建的第三个分配来完成此任务,但是否有更有效的方法来做到这一点?或者,有没有办法将 write-watch 属性添加到由库 X 或 Y 创建的现有分配?
基本上,这就是我今天正在做的事情(半伪代码):
void* x = LibraryX.Allocate(size);
void* y = LibraryY.Allocate(size);
void* a = VirtualAlloc(size, WRITE_WATCH);
LibraryA.WriteSomeStuffToRandomLocations(a);
addresses = GetWriteWatch(a);
for(auto p : addresses)
{
memcpy(x, p, size);
memcpy(y, p, size);
}
理想情况下,我可以有这样的东西:
void* x = LibraryX.Allocate(size);
void* y = LibraryY.Allocate(size);
void* a = GetVARangeThatDuplicatesAllWritesTo(x, y);
LibraryA.WriteABunchOfStuff(a);
【问题讨论】: