2
CreateProcess("something.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, 
    NULL, NULL, &sInfo, &pInfo);

ReadProcessMemory(pInfo.hProcess, (LPCVOID) (contx.Ebx + 8),
  (LPVOID) &baseAddress, sizeof(baseAddress), NULL);

hProcess=OpenProcess(PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,
  FALSE, pInfo.dwProcessId);

VirtualProtectEx(hProcess, (LPVOID) baseAddress, sizeof(IMAGE_DOS_HEADER),
    PAGE_EXECUTE_READWRITE, NULL);

WriteProcessMemory(hProcess, (LPVOID) baseAddress, (LPCVOID) pidh,
    sizeof(IMAGE_DOS_HEADER), NULL);

VirtualProctecExでERROR_NOACCESSが表示されるのはなぜですか?

4

1 に答える 1

5

VirtualProtectExドキュメントによると

lpflOldProtect [out] 指定されたページ領域の最初のページの以前のアクセス保護を受け取る変数へのポインター。このパラメーターが NULL であるか、有効な変数を指していない場合、関数は失敗します。

最後の口論について。NULL を渡しているので、失敗することが予想されます。

他にも問題がある可能性があります。たとえば、 ReadProcessMemoryからの戻り値をチェックしていないためbaseAddress、無効である可能性があります。

于 2012-10-12T09:57:39.040 に答える