です。VirtualAllocExの成功はベースアドレスを返しますが、WriteProcessは失敗し、エラーは487
int main()
{
HANDLE hTargetHandle;
int TargetProcessId=GetTargetProcessId();
hTargetHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,TargetProcessId);
if(hTargetHandle==INVALID_HANDLE_VALUE)
{
DWORD d=GetLastError();
printf("openprocess fail\n");
printf("the TargetProcessId is: %d\n",TargetProcessId);
printf("the result of getlast is: %d\n",d);
system("PAUSE");
exit(-1);
}
DWORD dwBufferSize=(DWORD)GetTargetProcessId-(DWORD)create;
DWORD dwProcBaseAddress=(DWORD)VirtualAllocEx(hTargetHandle,NULL,1024*1024,MEM_COMMIT,PAGE_EXECUTE_READWRITE); //the size here is 1024*1024,I don't know the size of the function I am going to inject to another process,so I use 1024*1024 here.I have ever tried to use 1024*1024*10,but it is the same error.
if(dwProcBaseAddress==NULL)
{
DWORD d=GetLastError();
printf("virtualallocex has fail\n");
printf("the last error is:%d\n",d);
system("PAUSE");
exit(-1);
}
int a=WriteProcessMemory(hTargetHandle,&dwProcBaseAddress,create,1024*1024,NULL); //create is a function I defined,used to inject to another process.
if(a==0)
{
DWORD d=GetLastError();
printf("writeprocessmemory has fail\n");
printf("the last error is %d\n",d);
system("PAUSE");
exit(-1);
}
DWORD dwThreadId;
HANDLE hRemoteThreadHandle=CreateRemoteThread(hTargetHandle,NULL,NULL,(LPTHREAD_START_ROUTINE)dwProcBaseAddress,NULL,0,&dwThreadId);
if(hRemoteThreadHandle!=INVALID_HANDLE_VALUE)
{
printf("succeed\n");
system("PAUSE");
exit(-1);
}
system("PAUSE");
return 1;
}
以下は結果である。 WriteProcessMemory
関数が失敗し、エラー487が発生します。これは、アドレスが無効であることを意味します。
しかし、アドレスがVirtualAllocEx
関数の戻り値では、戻り値がnullではないので、アドレスが利用可能であるべきです。私はどこに問題があるのか分からない。
ちょうどタイプミス。 'dwProcBaseAddress'を渡すことを意味するときに、'&dwProcBaseAddress'をWriteProcessMemoryに渡しています。 –