首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++新手汇编有关问题:给游戏调用call 出错

2013-01-08 
c++新手汇编问题:给游戏调用call 出错各位大大好!我用VC6按照视频教程内容写游戏call的调用,视频里用的是V

c++新手汇编问题:给游戏调用call 出错
各位大大好!我用VC6按照视频教程内容写游戏call的调用,视频里用的是VC2008,代码内容一样,但游戏不一样,给游戏调用call:“人物的打坐call”,遇到问题如下:

问题一:编译时候出现错误:error C2664: 'WriteProcessMemory' : cannot convert parameter 3 from 'const void *' to 'void *'   Conversion loses qualifiers
我把(LPCVOID)RemoteCall 改成 RemoteCall 之后可以编译成功,但视频里面是需要(LPCVOID)的,不知道如何解释这点?

问题二:按照问题一的方法(把(LPCVOID)RemoteCall 改成 RemoteCall )编译成功后,测试游戏时候发现调用call出错,游戏角色可以打坐,但同时弹出窗口提示出错,点击“确定”后 ,游戏窗口关闭;但是我把call的代码用网上流行的 代码注入器测试call 是成功,游戏角色可以正常打坐,也没有报错,不知道如何修改vc6代码解决这个问题?

请各位大大不吝赐教,谢谢!

=================VC6的代码如下=====================
void RemoteCall()
{
_asm
{
push 0x1
push 0x3
mov ecx,0x00ce5758
mov eax,0x00856040
call eax
        add esp,0x8
}
}

void CQQDlg::OnButton2() 
{
CWnd *pGamecall=FindWindow("Greate Voyages Online Game MainFrame","大航海 Online");
if (pGamecall==NULL)
{
SetDlgItemText(IDC_TIP,"游戏未运行");
return;
}// 
DWORD pID;
GetWindowThreadProcessId(pGamecall->m_hWnd,&pID);
HANDLE hTarget=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pID);
LPVOID CallBase=VirtualAllocEx(hTarget,NULL,0x1000,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hTarget,CallBase,(LPCVOID)RemoteCall,0x1000,NULL);
CreateRemoteThread(hTarget,NULL,0,LPTHREAD_START_ROUTINE(CallBase),NULL,0,NULL);
}
[解决办法]
add esp,0x8  这句去掉,
[解决办法]
堆栈平衡            

热点排行