【问题标题】:Can't analyse PE files more than certain size无法分析超过一定大小的 PE 文件
【发布时间】:2017-02-06 13:25:42
【问题描述】:

目前,我的代码能够获取小于 3MB 的 PE 文件的熵和文件偏移量,使用 notepad.exe 进行测试。但是,每当我尝试分析更大的文件时都会收到错误消息。

我不确定我应该如何解决这个问题。但是我的讲师告诉我创建另一个类似的功能。如果有人可以帮助我,真的很感激。

CLI 中显示的错误:

Call to ReadFile() failed.
Error Code: 998

错误部分:

dwFileSize = GetFileSize(hFile, NULL);
if (dwFileSize != INVALID_FILE_SIZE)
{
    bFile = (byte*)malloc(dwFileSize);

【问题讨论】:

  • 代码泄露了返回的字节*。这不会永远持续下去,最终 malloc() 返回 NULL 表示它无法分配更多内存。你不检查所以不可避免地 ReadFile() 会崩溃。
  • 感谢您的回复。我可以知道我应该如何解决这个问题吗?
  • 考虑显而易见的解决方案。就像调用 free() 一样。并以 x64 为目标。
  • 更好的主意:忘记mallocfree 的存在,使用std::make_unique<char[]>,让库处理分配和释放的细节。
  • 我已经在我的 main 函数下的 free(bFile) 中添加了。但我不确定我应该如何编辑我的指针代码以确保不泄漏内存。

标签: c++ portable-executable entropy


【解决方案1】:

您将错误代码解码为“对内存位置的无效访问”,并且您没有检查 malloc 的返回值,即使您需要循环 ReadFile 以读取整个内容。

您的内存不足。你当然需要重新设计你的算法。

正如 Hans Passant 指出的那样,您有内存泄漏,因为您在完成文件时从未释放文件的内存。 C++ 不会被垃圾回收。

【讨论】:

  • C++ 没有垃圾回收,但它确实有智能指针和容器类,可以自动管理内存。
  • 我已经在我的 main 函数下的 free(bFile) 中添加了。但我不确定我应该如何编辑我的指针代码以确保不泄漏内存。
  • 它现在可以工作了,但是在分析更大的文件时需要几秒钟的时间。无论如何谢谢:)
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
相关资源
最近更新 更多