2014-02-12 49 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实际上足够长以便被修改。

相关问题