2014-02-12 90 views
-1

它在msdn網站上提供了一個非常簡短的描述,說「嘗試訪問無效地址」。我只是不確定它是否意味着無效,因爲「這甚至不是地址」或者「你不能使用這個地址!」當WriteProcessMemory返回487個ERROR_INVALID_ADDRESS時,這意味着什麼?

因爲我不知道它是哪一個,所以很難決定接下來要做什麼。

我到WriteProcessMemory的電話:

if(!WriteProcessMemory(hProcess, (LPVOID)loc.c_str(), (LPVOID)"Book of Stupid", sizeof("Book of Stupid"), NULL)) 
{ 
std::cout << "writefail to " + loc + "\nerror "; 
std::cout << GetLastError() << std::endl; 
} 

感謝您的時間

+4

使用'sizeof(「Book of Stupid」)'是非常錯誤的,因爲它給你一個指針的大小(通常是4或8個字節,取決於你的系統),而不是你的字符串的長度因爲你可能期待... –

+0

這意味着它說,地址是無效的。在你的過程中,* loc *的地址在另一個過程中也是有效的機率很低。它是一個有效地址並且做你希望它的可能性是-100% –

+0

@barakmanos:實際上,no,sizeof(「constant string」)給出了字符串的長度(包括終止符)。 (或者至少,這就是它在MSVC中的作用,我想它是標準的,但我不確定。) –

回答

2

這意味着正是它說,這個地址不能修改。你的函數調用看起來錯誤:

(LPVOID)loc.c_str() 

這看起來像一個本地的std :: string,所以你要修改的本地地址(從您自己的應用程序),在其他一些應用程序hProcess?那肯定會失敗。進一步說,假設hProcess是用於當前進程的,那麼你將不得不確保loc實際上足夠長以便被修改。

相關問題