gpt4 book ai didi

使用 100% CPU 的 C++ 编译代码

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:02 24 4
gpt4 key购买 nike

我有以下代码(它获取所有进程,然后在其中搜索正则表达式模式,代码用于更大的个人恶意软件检测项目),该代码可以满足我的要求,但唯一的问题是它使用了 100% 的 CPU ,我做错了什么?内存分配不好?我用 MS Visual Studio 2010 (cl.exe/EHsc mycode.cpp) 编译了它

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <regex>

using namespace std;

#pragma comment(lib, "psapi.lib")

void PrintProcessNameAndID(DWORD);
void find_locs(HANDLE process);
void ListProcesses();

int main(int argc, char **argv) {
ListProcesses();
}

void find_locs(HANDLE process) {

unsigned char *p = NULL;
MEMORY_BASIC_INFORMATION info;

for ( p = NULL;
VirtualQueryEx(process, p, &info, sizeof(info)) == sizeof(info);
p += info.RegionSize )
{
std::string buffer;

if (info.State == MEM_COMMIT &&
(info.Type == MEM_MAPPED || info.Type == MEM_PRIVATE))
{
DWORD bytes_read;

buffer.resize(info.RegionSize);
ReadProcessMemory(process, p, &buffer[0], info.RegionSize, &bytes_read);
buffer.resize(bytes_read);

const std::tr1::regex rx("([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,7})");
std::tr1::match_results<std::string::const_iterator> res;
std::tr1::regex_search(buffer, res, rx);

ofstream myfile;
myfile.open ("proc.txt", ios::app);

for (unsigned int i=0; i<res.size(); ++i)
{
std::cout << res[i] << std::endl;
myfile << res[i] << "\n";
}

myfile.close();
}
}
}

void ListProcesses()
{
DWORD aProcesses[1024];
DWORD cbNeeded;
DWORD cProcesses;
unsigned int i;

if (!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))
return;

cProcesses = cbNeeded / sizeof(DWORD);

for ( i = 0; i < cProcesses; i++ )
{
PrintProcessNameAndID(aProcesses[i]);
}
}

void PrintProcessNameAndID(DWORD processID)
{
TCHAR szProcessName[MAX_PATH]; // = TEXT("<unknown>");

HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);

if (NULL != hProcess)
{
HMODULE hMod;
DWORD cbNeeded;

if (EnumProcessModules(hProcess, &hMod, sizeof(hMod),
&cbNeeded))
{
GetModuleBaseName(hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR));
}
}
_tprintf(TEXT("pid: %u file: %s\n"), processID, szProcessName);
find_locs(hProcess);
CloseHandle(hProcess);
}

感谢您的帮助!

最佳答案

一个程序占用 100% 的处理器并没有错......(我不知道如何将这个答案扩展到这个之外)

关于使用 100% CPU 的 C++ 编译代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com