能力值:
( LV9,RANK:200 )
|
-
-
2 楼
WriteProcessMemory(m_hProcess,(LPVOID)0x004014FE,&_T("EB07"),1,NULL);
这个是把'E'的asc值给byte ptr ds:[0x004014FE]
所以EB就被改为45了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
BYTE b=0x90;
WriteProcessMemory(m_hProcess,(LPVOID)0x004014FE,&b,1,NULL);
恩这样改下就可以了
但我还有个问题
比如我用CFile读取一个字符串放在CString str;中比如str="0x90"
如何转成BYTE 0x90;
我下面的转换不成功
CString str1,str2;
int a1,a2;
str1="0x90";
str2="0xEB";
a1=_ttoi(str1);
a2=_ttoi(str2);
BYTE b1=a1;
BYTE b2=a2;
请问哪里错了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
CString str = _T("0XEB");
int nResult = 0;
_stscanf_s( str, _T("%x"), &nResult );
BYTE m = (BYTE)nResult;
这样问题解决了
但地址的CString还不能解决
完整代码:
CString str = _T("0XEB");
int nResult = 0;
_stscanf_s( str, _T("%x"), &nResult ); // vs 2005
BYTE m = (BYTE)nResult;
CString str2;
str2="0x004014FE";
int nResult1 = 0;
_stscanf_s( (LPCTSTR)str2, _T("%x"), &nResult ); // vs 2005
unsigned long p=0x00;
HWND mainhwnd1=::FindWindow(NULL,_T("4")); //查找主窗口
GetWindowThreadProcessId(mainhwnd1,&p);//得到窗口的ProcessID
HANDLE m_hProcess=OpenProcess(PROCESS_ALL_ACCESS,true,p);//打开Process
WriteProcessMemory(m_hProcess, (LPVOID)nResult1,&m,1,NULL);
请教各位大大如何将str2="0x004014FE"; 字符串中的数据变成指针地址
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
上面完整代码我运行后用od看没反应
改成WriteProcessMemory(m_hProcess, (LPVOID)0x004014FE,&m,1,NULL);
后可用
哪里出问题了...
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
忽然看见&nResult 写错了
应该是&nResult 1
郁闷
以后写代码不能偷懒。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
先学习语言基础吧
|
能力值:
( LV5,RANK:70 )
|
-
-
8 楼
脚踏实地,先打基础
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
这两个函数可以用来转换字符串为16进制的地址
unsigned long strtoul(const char *nptr, char **endptr, int base );
unsigned long wcstoul(const wchar_t *nptr,wchar_t **endptr,int base );
请教各位大大如何将str2="0x004014FE"; 字符串中的数据变成指针地址
CString str2 = "0x004014FE";
unsigned long ulAddress = 0;
#ifdef _UNICODE
ulAddress = wcstoul(str2.GetBuffer(), NULL, 16);
#else
ulAddress = strtoul(str2.GetBuffer(), NULL, 16);
#endif
|
|
|