// PROCESS.cpp : コンソール アプリケーション用のエントリ ポイントの定義 // #include "stdafx.h" #include "PROCESS.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // 唯一のアプリケーション オブジェクト CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // MFC の初期化および初期化失敗時のエラーの出力 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: 必要に応じてエラー コードを変更してください。 cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { // TODO: この位置にアプリケーションの動作を記述してください。 // 変数定義 HANDLE Gp; // プロセス検索用ハンドル HANDLE hnd; // プロセス情報格納用ハンドル定義 PROCESSENTRY32 pe32; // プロセス情報が格納される unsigned long ID=0; // プロセスID int i=0; // 汎用 unsigned long ulReadAddress=0; // 読み込むアドレス int iReadSize=0; // 読み込むサイズ BYTE bMemoryData[256]; // 読んだデータを格納 // チェック処理からプロセス取得まで // argv[1](第一引数が存在しているか)チェック。 // 指定が無ければヘルプを表示して終了。 if(argc==1){ printf("プロセスメモリ読み込みサンプル\n"); printf(" usage:pro_read.exe {対象プロセス名}\n"); return 0; } strupr(argv[1]); // 引数指定されたプロセス名を大文字に変換 pe32. dwSize = sizeof( pe32 ); //初期化 // 現在のプロセス情報をGpに入れる Gp=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // 全プロセスを検索 if(Process32First(Gp,&pe32)){ do{ strupr(pe32.szExeFile); // プロセス名を大文字に変換(念のため) if(strstr(pe32.szExeFile,argv[1])!=0){ // 指定したプロセスがあれば ID = pe32.th32ProcessID; // そのプロセスIDを取得 break; } }while(Process32Next(Gp,&pe32)); } CloseHandle(Gp); // もしIDがNULLだったらプロセス取得失敗、終了 if(ID==NULL){ printf("プロセス %s は見つかりませんでした。\n",argv[1]); return 0; } printf("指定したプロセス名の条件:%s\n",argv[1]); printf("発見したプロセス名   :%s(PID=%ld)\n",pe32.szExeFile,ID); // 取得したIDのプロセスを開く // hndにIDのプロセスの情報を格納 hnd = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, false,ID); // アドレスと読み込むバイト数を入力してそのデータを出力 printf("アドレス(16進)="); scanf("%lx",&ulReadAddress); printf("サイズ(10進)="); scanf("%d",&iReadSize); // 読み込み ReadProcessMemory( hnd,(LPVOID)(DWORD)ulReadAddress,bMemoryData,iReadSize, NULL); // 表示 for(i=1;i<=iReadSize;i++){ printf("%02X ",bMemoryData[i]); if(i%16==0) puts(""); // 16バイトごとに改行 } // ハンドルをクローズして終わり CloseHandle(hnd); printf("\nProgram end.\n"); } return nRetCode; }