这些代码可以在我写的测试程序4的进程里修改0x004014FE的跳转
  HWND mainhwnd1=::FindWindow(NULL,_T("4"));    //查找主窗口 
  GetWindowThreadProcessId(mainhwnd1  ,&p);//得到窗口的ProcessID  
  HANDLE  m_hProcess=OpenProcess(PROCESS_ALL_ACCESS,true,p);//打开Process  
  BYTE b=0xEB; 
  WriteProcessMemory(m_hProcess,(LPVOID)0x004014FE,&b,1,NULL); 
但是我想修改的代码放在配置文件里
CString str;
CStdioFile file;
file.Open(_T("c.ini"), CFile::modeRead)
file.ReadString(str);
file.Close(); 
_stscanf_s( str, _T("%x"), &p1 );
BYTE b=(BYTE)p1;
WriteProcessMemory(m_hProcess,(LPVOID)0x004014FE,&b,1,NULL); 
如果c.ini文件的第一行写0xEB时WriteProcessMemory运行跟我想象的一样正常
但如果我想多写点代码比如str=0x39BD60FAFFFF
请问应该怎么做

解决方案 »

  1.   

    CString str= _T( "0x39BD60FAFFFF") ;
    int nLength = ( str.GetLength() - 2 ) / 2; // 2个字符一组,放进一个 byte 中
    byte *pBuffer = new byte[nLength];

    str = str.Right( str.GetLength() - 2 );  // 去掉 0x for ( int i = 0; i < nLength; i++ )
    {
    CString strByte = str.Left( 2 );
    int nTemp = 0;
    _stscanf_s( strByte, _T("%x"), &nTemp );
    pBuffer[i] = (byte)nTemp;
    str = str.Right( str.GetLength() - 2 );
    }
      

  2.   

    同时庆祝一下自己在 CSDN 上回复的第100个帖子
      

  3.   

    CString str,stri,s_1; 
    CStdioFile file; 

    if(!(file.Open(_T("c.ini"), CFile::modeRead)))
        {
     MessageBox(_T("没有找到配置文件c.ini"));
     return;
        }
    file.ReadString(s_1); 
    file.Close();                               //一不用file就关闭
      AfxExtractSubString(str,s_1,1,'_');            ////////////MFC隐藏函数___用来导出选定符号前的字符一次导出一个
      AfxExtractSubString(stri,s_1,2,'_');
      int ilong;                //写入内存代码的长度.....2个字符一个字节
      ilong= _ttoi(stri);                     //把读到的字符转成数字变量
    int nLength = ( str.GetLength() - 2 ) / 2; // 2个字符一组,放进一个 byte 中
    byte *pBuffer = new byte[nLength];
        
    str = str.Right( str.GetLength() - 2 );  // 去掉 0x for ( int i = 0; i < nLength; i++ )
    {
    CString strByte = str.Left( 2 );
    int nTemp = 0;
    _stscanf_s( strByte, _T("%x"), &nTemp );
    pBuffer[i] = (byte)nTemp;
    str = str.Right( str.GetLength() - 2 );        
    } unsigned  long  p1=0x00; 
    HWND mainhwnd1=::FindWindow(NULL,_T("30"));    //查找主窗口 
    GetWindowThreadProcessId(mainhwnd1,&p1);//得到窗口的ProcessID  
    HANDLE  m_hProcess=OpenProcess(PROCESS_ALL_ACCESS,true,p1);//打开Process  
    WriteProcessMemory(m_hProcess,(LPVOID)0x00401518,pBuffer,ilong,NULL); //写入内存
      HWND mainhwnd1;  
      mainhwnd1=::FindWindow(NULL,_T("无标题 - 29"));  
      ::PostMessage  (mainhwnd1,  WM_COMMAND,57601,NULL);