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 回答