#define BURRER_SIZE 0x100
char szFilename[]="111.exe";
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
::CreateProcess(NULL, szFilename, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
::CloseHandle(pi.hThread);
HANDLE myhand=pi.hProcess;
char szbuffer[BUFFER_SIZE];
DWORD addr=0x0012ff7c;
::ReadProcessMemory(myhand,(LPVOID)addr,szbuffer,BUFFER_SIZE,NULL);
printf("%s\n",szbuffer)
::CloseHandle(myhand);addr(0x0012ff7c)为111.exe的内存地址,保存着字符串变量char* sz="游戏";为什么上面的代码不能从地址addr中读出
字符串呢?
知道一个进程的某个地址保存着一个汉字字符串,怎样把这个字符串从这个地址读出来?
char szFilename[]="111.exe";
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
::CreateProcess(NULL, szFilename, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
::CloseHandle(pi.hThread);
HANDLE myhand=pi.hProcess;
char szbuffer[BUFFER_SIZE];
DWORD addr=0x0012ff7c;
::ReadProcessMemory(myhand,(LPVOID)addr,szbuffer,BUFFER_SIZE,NULL);
printf("%s\n",szbuffer)
::CloseHandle(myhand);addr(0x0012ff7c)为111.exe的内存地址,保存着字符串变量char* sz="游戏";为什么上面的代码不能从地址addr中读出
字符串呢?
知道一个进程的某个地址保存着一个汉字字符串,怎样把这个字符串从这个地址读出来?
其次,::CloseHandle(pi.hThread); 你把一个进程的主线程关了,据我所知进程也就随之关闭了吧,因为没有线程的进程是没有意义的,所以后面你引用子进程的句柄我不知道可不可行.
再次,你确定char* sz="游戏";这一句在子进程中是把变量分配在0x0012ff7c这个地址?你如何保证?
最后,那个字符串只有几个字节,你却读了BURRER_SIZE这么多字节,会不会读到不允许读的地方?
其次.CloseHandle只是减少句柄的引用计数,注意,是减少句柄的引用计数.并不关闭线程或进程.
再次.的确,位置没办法保证.
最后,读取越界也没什么关系.你处理自己关决计的长度就OK了.解决:
单独调试,看每一个API的执行结果.别只问.
只有8分????太小气了吧???