2013-06-20 43 views
2

我一直在閱讀網站和谷歌搜索試圖找到一個決定性的答案,即時通訊嘗試做,但我沒有找到一個回答我所有的問題。訪問外部進程的內存

我有兩個過程。一個有一個整型變量,我想通過第二個進程進行更改。我知道如何讀/寫特定的內存位置,但我只知道如何在本地進程地址上執行它。

我不明白createremotethread。是否有可能得到最簡單,最簡單的操作進程內存不是原生程序的內存的例子?當然,假設兩個程序都在運行。

在此先感謝

編輯:我得到了來自其他來源,我的問題的一些答案。我只想了解如何寫一個可放大的內存位置,例如:

WriteProcessMemory(phandle,(void *)address,val,sizeof(val),NULL);

這似乎沒有任何效果,假設VAL是一個布爾值:

while(true){ 
    key=getch(); 
    if(key=='1'){ 
     if(val)val=false; 
     else val=true; 
     WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL); 
    } 
    bool val2; 
    ReadProcessMemory(phandle, (void*)address, &val2, sizeof(val2), NULL); 
    cout<<val2<<endl; 
} 

始終顯示爲0。爲什麼呢?

+0

如果'val'是一個實際的'bool'變量,則需要使用'&val'代替。但是如果'val'已經是一個指向'bool'的指針,那麼你不需要'&'。 –

+0

第一件事,做這個布爾結果= ReadProcessMemory,然後輸出結果,如果結果是0,那麼任何一個是矛或任何錯誤,或地址 – aah134

+0

做到了這一點,它返回一個積極的。從內存中讀取似乎沒有錯誤當我做BOOL結果= WriteProcessMemory(phandle,(void *)地址,&val,sizeof(val),NULL)時,似乎 – ziggyyoyo

回答

0

問題已解決,我不得不使用 HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS,0,pid)

代替 HANDLE phandle = OpenProcess(PROCESS_VM_READ,0,PID)

0

嘗試閱讀共享內存和互斥鎖,以確保兩個進程不會同時處理同一個內存點。

BOOL WINAPI WriteProcessMemory(
    _In_ HANDLE hProcess, 
    _In_ LPVOID lpBaseAddress, 
    _In_ LPCVOID lpBuffer, 
    _In_ SIZE_T nSize, 
    _Out_ SIZE_T *lpNumberOfBytesWritten 
); 

沒有傳遞正確的參數如上,你必須有至少前4個參數的工作

做的跟隨

WriteProcessMemory(phandle,(void*)address,&val,sizeof(val),NULL); 

通知VAL傳遞的地址val

+0

,但我剩下的唯一問題是writeprocessmemory的用法。我無法得到它的工作 – ziggyyoyo

+0

不工作 WriteProcessMemory(phandle,(void *)address,&val,sizeof(val),NULL); int val2; ReadProcessMemory(phandle,(void *)address,&val2,sizeof(val2),NULL); cout << val2 << endl; 總是顯示0.爲什麼? – ziggyyoyo

+0

檢查返回值,如果是0,那麼一些參數是錯誤的 – aah134