간단한 응용 프로그램을 실행하고 Window의 PSAPI를 사용하여 메모리 내의 특정 오프셋을 읽으려고합니다.
디버거를 실행할 때 메모리 주소의 실제 값과 내 ".exe"진입 점에 대한 상대 값을 얻습니다.
아직 다음 코드를 실행할 때 내 오프셋과 함께 진입 점으로 얻는 기본 모듈이 다른 주소를 생성합니다 (잘못되었거나 몇 개의 (hexa) demical 점에 의해). 무엇이 문제일까요?EnumProcessModules를 사용하는 Windows 프로그램 진입 점은 예기치 않은 값을 반환합니다.
ReadMemory는
HWND WINDOW_HANDLE; HANDLE PROC_HANDLE; DWORD PROC_ID; DWORD address; SIZE_T bytesRead; int InitReadMemory(const char* windowClass,const char* caption, DWORD addressOffset) { DWORD cbNeeded; DWORD dwdResult; HMODULE mainModule; BOOL enumResult; //Get the window handle WINDOW_HANDLE = FindWindow(windowClass, NULL); if(WINDOW_HANDLE == NULL) { //Window was not foud return 10; } //Get the process ID dwdResult = GetWindowThreadProcessId(WINDOW_HANDLE, &PROC_ID); if(dwdResult==0) { //Getting Process ID failed return 20; } //Open the process PROC_HANDLE = OpenProcess(PROCESS_ALL_ACCESS, false, PROC_ID); if(PROC_HANDLE==NULL) { //Process failed to open return 30; } /* *Get the Main Module- *first entry in the returned HMODULE array from *EnumProcessModules */ enumResult = EnumProcessModules(PROC_HANDLE, &mainModule, sizeof(HMODULE), &cbNeeded); if(enumResult != 0) { //Failed enumerating process modules return 40; } //offset the requested memory address from the application's base address address = (DWORD)((UINT_PTR)mainModule + addressOffset); #ifdef DEBUG using namespace std; char filenameBuffer[64]=""; string number; stringstream stristream; stristream << address; stristream >> number; cout << number << "\r\n" << endl; GetModuleFileNameEx(PROC_HANDLE, mainModule , filenameBuffer, 256); cout << (byte)ReadMemory<byte>() << "\r\n" << number << "\r\n" << filenameBuffer << endl; system("PAUSE"); #endif return 1;}
사전 :
P.S.에 감사 ReadProcessMemory에 대한 템플릿입니다 나는 대부분은 단지 바하 둠 tsss ... 포인터를 찾고 있어요
업데이트 :이 완료된 후가 은 분명히을 GetLastError 값을 확인, EnumProcessModules가 299 오류 코드를 표시합니다. 디버깅은 mainModule에 아무것도 저장하지 않는다는 것을 보여줍니다.하지만 EnumProcessModules는 "no errors"와 마찬가지로 0을 반환합니다.
어제 나는 그것을 얻을 수 있었고 GetModuleFileName이 propery (동일한 코드, GetLastError 만 추가 함)로 작동하도록했습니다.