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 //;发包
} 昨天进游戏看了下实际上前面有些地方不对。下面以字节指针方式修改:
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]