- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 DWORD 值,我想监视更改,所以我决定使用保护页。
问题是 STATUS_GUARD_PAGE_VIOLATION
异常是在使用 VirtualProtect
将内存标记为 PAGE_GUARD
后立即触发的:
DWORD* lpAddress = (DWORD*)0xDEADBEEF;
void test()
{
AddVectoredExceptionHandler(0x1, MyHandler);
DWORD oldprotection;
VirtualProtect(lpAddress, sizeof(DWORD), PAGE_READWRITE | PAGE_GUARD, &oldProtection);
//Here, the STATUS_GUARD_PAGE_VIOLATION is triggered and MyHandler is immediately called
MessageBox(NULL, L"Just a test", L"", MB_OK);
}
LONG WINAPI MyHandler(PEXCEPTION_POINTERS pExc)
{
if(pExc->ExceptionRecord->ExceptionCode == STATUS_GUARD_PAGE_VIOLATION)
{
//Immediately called after VirtualProtect
//If I try to use VirtualProtect again, it will also immediately trigger MyHandler
}
return EXCEPTION_CONTINUE_EXECUTION;
}
我读过一些关于 VirtualProtect
正在访问其函数体内的地址的信息,这就是触发器发生的原因(第一个触发器来自 VirtualProtect
本身),但我我不确定。
有什么办法可以避免这种情况吗?
还是我做错了什么?
最佳答案
VirtualProtect
保护包含您要保护的 4 个字节的整个 4K 页面(或可能的页面)。对该页面的任何部分(不仅仅是您要保护的地址)的任何访问都将导致触发保护页面警报。
如果您只想监视这 4 个字节,则保护页面不是执行此操作的方法。
关于c++ - 保护页面在 VirtualProtect 之后立即触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41657008/
我正在使用 CreateFileMapping 和 MapViewOfFile 函数将文件映射到内存中。在某一点之后,我调用 VirtualProtect 将其保护从只读更改为读写。此调用失败,Get
VirtualProtect 的第三个参数可以使用如下标志: PAGE_EXECUTE PAGE_NOACCESS PAGE_READWRITE PAGE_READONLY ... 一开始我觉得Vir
我需要使用 VirtualProtect,我的问题是关于传递给函数的区域地址。它说(在 MSDN 上)“描述起始页的地址”,它必须是页面开头的地址还是可以是该页面中的任何地址?也就是说,是不是应该先用
我有一个 DWORD 值,我想监视更改,所以我决定使用保护页。 问题是 STATUS_GUARD_PAGE_VIOLATION 异常是在使用 VirtualProtect 将内存标记为 PAGE_GU
美好的一天,我正在尝试以某种方式防止“dll 注入(inject)”到我的程序中。这是我到目前为止所拥有的,但由于某种原因它使我的 .exe 崩溃了。我正在加载这段代码,我的程序附加了一个 .dll。
我在使用 Windows 的 Virtualprotect() api 时遇到问题。我从学校得到了一个作业,我的老师告诉我们,在过去内存力稀缺且成本高昂的时候。程序员必须创建可以动态修改自身以节省内存
我正在 D2010 中进行简单的本地化工作。我正在处理表单上的所有字符串,因为 ETM 似乎超出了我的需求,其他第 3 方工具也是如此......(尽管我目前不太确定!) 下面用于更改 Const.p
这是一些标准的代码片段,我们在其中安装了钩子(Hook),在我们感兴趣的函数的开头重写了一些字节。我的问题是:为什么我们需要重新保护一 block 重写的内存?我们不能只保留 PAGE_EXECUTE
我正在分析进程加载的各种模块。不幸的是,我无法创建 kernel32.dll 内存快照,尽管该函数可以与其他模块(例如 ntddl.dll)一起正常工作。问题在于以下代码: /* Copy code
这按预期工作。引发了 STATUS_GUARD_PAGE_VIOLATION。 int main() { DWORD oldp; DWORD *pdp = new DWORD;
我正在尝试使用 PAGE_GUARD Hook 函数,但在调用页面/地址时它不会引发任何异常。 void HookMe(){ printf("Not hooked\n"); } void Go
我使用 VirtualAlloc(Ex) 来分配和提交大范围的页面。 稍后在执行过程中,我希望“ fork ”该内存,启动一个可以在当前状态下读取它的新进程,而父进程将其视为写时复制内存。 这可以用
我知道 VirtualProtect 函数会毫无疑问地更改内存中页面的权限。当任何正在运行的进程能够使用它时,这肯定不会立即产生效果吗? 例如,有人可以轻松编写一段使用 VirtualProtectE
我有 Delphi 6 DLL,它在内部使用第三方库来进行自动资源字符串翻译。 在库源代码中,2 个 RTL 函数(ShortCutToText 和 LoadResString)被替换为对应的多语言函
我正在尝试转换来自 CHook 的代码论坛发布了这段代码,它执行 EAT Hook : #include #include #include #if PSAPI_VERSION == 1 #pr
我是一名优秀的程序员,十分优秀!