潇潇 发表于 2011-2-16 12:46:18

VC6.0 MFC 实现热血江湖喊话CALL编写(字符指针方式和字节指针方式)

//         CALL原型
//         005FC8C2|> \C6840D 91D5FF>MOV BYTE PTR SS:,0
//         005FC8CA|.8A85 90D5FFFF MOV AL,BYTE PTR SS:
//         005FC8D0|.FEC0          INC AL
//         005FC8D2|.8D95 74D5FFFF LEA EDX,DWORD PTR SS:          ;ebp=0012B290
//         005FC8D8|.8885 90D5FFFF MOV BYTE PTR SS:,AL                  ;要读取位数计数
//         005FC8DE|.0FBEC0      MOVSX EAX,AL
//         005FC8E1|.8D48 17       LEA ECX,DWORD PTR DS:                   ;打出计数
//         005FC8E4|.83C0 1D       ADD EAX,1D                                                      ;ebp=0012B290
//         005FC8E7|.66:898D 78D5F>MOV WORD PTR SS:,CX             ;频道
//         005FC8EE|.8B0D 7896D000 MOV ECX,DWORD PTR DS:            ;dd D09678
//         005FC8F4|.50            PUSH EAX                                                               ;计数
//         005FC8F5|.52            PUSH EDX                                                               ;00128804
//         005FC8F6|.E8 751BE5FF   CALL Client.0044E470                                        ;发包      
char* str="1234";//测试内容
char* SayText= new char;
memset(SayText,0,34);
SayText=(char)8;
SayText=(char)164;
SayText=strlen(str);
memcpy(&SayText,&str,4);

_asm
{
MOV ECX,DWORD PTR DS:
PUSH 0x22             //包长                  
PUSH SayText      //包文指针                  
mov EAX,0x0044E470
CALL EAX //;发包
}

潇潇 发表于 2011-2-18 19:15:21

昨天进游戏看了下实际上前面有些地方不对。下面以字节指针方式修改:
      UpdateData(TRUE);
      int tLen = m_SayText.GetLength();
      char temp ;
      memset(temp,0,256);      
      itoa(tLen,temp,10);
      //::MessageBox(0,temp,_TEXT("喊话长度"),0);
      int pLen=6+0x17+tLen+1;
      memset(temp,0,256);      
      itoa(pLen,temp,10);
      //::MessageBox(0,temp,_TEXT("总包长"),0);
      byte* SayText= new byte;
      
      memset(SayText,0,pLen);
      SayText=8;
      SayText=0x17+tLen+1;
      SayText=m_Channel.GetCurSel();
      memset(temp,0,256);      
      itoa(m_Channel.GetCurSel(),temp,10);
      //::MessageBox(0,temp,_TEXT("频道"),0);
      SayText=strlen(m_SayText)+1;
      memcpy(&SayText,m_SayText.GetBuffer(tLen),tLen+1);
      _asm
      {
                MOV ECX,DWORD PTR DS:
                PUSH pLen
                PUSH SayText
                MOV EAX,0x0044E470
                CALL EAX //;发包
      }
页: [1]
查看完整版本: VC6.0 MFC 实现热血江湖喊话CALL编写(字符指针方式和字节指针方式)