noob

dump

Aug 25th, 2011
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.61 KB | None | 0 0
  1. #include <windows.h>
  2. #include <psapi.h>
  3. #include <iostream>
  4. #include <vector>
  5. #include <fstream>
  6. #include <sstream>
  7.  
  8. #pragma comment(lib, "psapi.lib")
  9.  
  10. //имя программы
  11. #define PROGRAM_NAME            "Opera"
  12.  
  13. //получить размер памяти, занимаемой приложением
  14. DWORD GetMemorySize(HANDLE hProc)
  15. {
  16.         //структура с информацией о процессе
  17.         PROCESS_MEMORY_COUNTERS pmcInfo;
  18.  
  19.         //получаем информацию о процессе
  20.         if (GetProcessMemoryInfo(hProc, &pmcInfo, sizeof(pmcInfo)))
  21.                 return (DWORD)pmcInfo.WorkingSetSize;
  22.         else
  23.                 return 0;
  24. }
  25.  
  26. //получить базовый адрес процесса
  27. LPVOID GetBaseAddress(HANDLE hProc)
  28. {
  29.         //структура с информацией о процессе
  30.         MODULEINFO miInfo;
  31.  
  32.         //получаем базовый адрес процесса
  33.         if (GetModuleInformation(hProc, NULL, &miInfo, sizeof(miInfo)))
  34.                 return miInfo.EntryPoint;
  35.         else
  36.                 return NULL;
  37. }
  38.  
  39. //вывод результата работы
  40. void MessageResult(DWORD dwStart, DWORD dwMemSize)
  41. {
  42.         //выводим размер памяти и время выполнения
  43.         std::basic_stringstream<TCHAR> ssInfo;
  44.  
  45.         ssInfo << TEXT("Программа: ") << TEXT(PROGRAM_NAME) << TEXT("\n") <<
  46.                 TEXT("Начальный адрес: ") << dwStart << TEXT("\n") <<
  47.                 TEXT("Размер занимаемой памяти: ") << (dwMemSize / 1024) << TEXT(" кБ\n");
  48.  
  49.         MessageBox(NULL, ssInfo.str().c_str(), TEXT("Результат"), MB_OK);
  50. }
  51.  
  52. int main()
  53. {
  54.         //ищем окно
  55.         HWND hWnd = FindWindow(NULL, TEXT(PROGRAM_NAME));
  56.         if (!hWnd)
  57.         {
  58.                 MessageBox(NULL, TEXT("Программа \"" TEXT(PROGRAM_NAME) "\" не запущена."), TEXT("Ошибка"), MB_IC:: onerror ::);
  59.                 return EXIT_FAILURE;
  60.         }
  61.  
  62.         //получаем ID процесса
  63.         DWORD dwPID;
  64.         GetWindowThreadProcessId(hWnd, &dwPID);
  65.         if (!dwPID)
  66.         {
  67.                 MessageBox(NULL, TEXT("Невозможно получить ID процесса."), TEXT("Ошибка"), MB_IC:: onerror ::);
  68.                 return EXIT_FAILURE;
  69.         }
  70.  
  71.         //получаем хэндл процесса
  72.         HANDLE hProc;
  73.         hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPID);
  74.         if (!hProc)
  75.         {
  76.                 MessageBox(NULL, TEXT("Невозможно получить хэндл процесса."), TEXT("Ошибка"), MB_IC:: onerror ::);
  77.                 return EXIT_FAILURE;
  78.         }
  79.  
  80.         //получаем размер занимаемой памяти
  81.         DWORD dwMemSize = GetMemorySize(hProc);
  82.         if (!dwMemSize)
  83.         {
  84.                 MessageBox(NULL, TEXT("Невозможно получить размер памяти, занимаемой приложением."), TEXT("Ошибка"), MB_IC:: onerror ::);
  85.                 //закрываем хэндл процесса
  86.                 CloseHandle(hProc);
  87.  
  88.                 return EXIT_FAILURE;
  89.         }
  90.  
  91.         //начальный адрес
  92.         LPCVOID pAddr = GetBaseAddress(hProc);
  93.  
  94.         //закрываем хэндл процесса
  95.         CloseHandle(hProc);
  96.  
  97.         //результат
  98.         MessageResult((DWORD)pAddr, dwMemSize);
  99.  
  100.         return EXIT_SUCCESS;
  101. }
Add Comment
Please, Sign In to add comment