c++ - C++中的内存扫描

标签 c++ winapi visual-c++ memory

我正在 Visual Studio 2010 中处理一个 WIN32 项目。我正在尝试通过 ClamAV(开源防病毒)引擎扫描我的主内存,以在主内存中搜索恶意/受感染的文件。

到目前为止,我编写的代码通过使用 Windows 函数 CreateToolhelp32Snapshot 创建了整个主内存的快照

然后我从快照中打开一个特定的进程,并将其传递给 ClamAV 引擎,然后由引擎判断它是否是恶意的。我每 10 秒重复一次整个机制。但我认为这不是一种有效的方式,

我想做的是扫描我的整个内存一次,然后我只扫描那些在主内存中新创建的进程。请指导我有没有办法只从内存而不是整个内存中获取新创建的方法

最佳答案

我认为不能纯粹在用户空间程序中完成。 我对 Windows API 不是很熟悉,但我可以给你一些关于如何操作的粗略提示。

  1. 您应该在每个程序执行之前扫描它。
  2. 使所有内存成为以后分配的程序不可执行(NX位)
  3. 程序在尝试执行时会触发页面错误,现在扫描它!!
  4. 将扫描的内存设为只读,然后继续执行
  5. 一旦程序试图写入此区域,再次使其不可执行

注意:如果要确保安全,一个内存区域永远不能同时变为可执行和可写。

这样你只需要检查那些正在执行的内存。而且它应该非常有效。

关于c++ - C++中的内存扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778497/

相关文章:

c++ - 为什么 lambda nullptr 取消引用在这种情况下有效?

c++ - 傻瓜的迭代/动态拓扑排序

c++ - 将 IBM C++ 编译器从 xlc_R 10.0 升级到 11.1 后出现的问题

c++ - 在 OO 中创建一个窗口

c++ - 具有引用参数的重载函数模板

c++ - 在 Dialog Message Proc 中获取应用程序对象指针

c++ - 以编程方式检查数字签名

c++ - 指针数组的问题

c++ - CRichEditCtrl 加载 Unicode 文本不正确

c++ - 在 MBCS 项目中使用 unicode dll,反之亦然