在c中挂钩呼叫功能?
大家好,
???????????????我是c的新手,但我已设法创建自己的DLL并将其注入我的gameserver.exe 好吧,我已经尝试了几天挂钩用户调用功能,但我总是失败,因为它属于程序集:( 0048C1AF |. 8B9B 4C010000 MOV EBX,DWORD PTR DS:[EBX+14C] 0048C1B5 |. 8B13 MOV EDX,DWORD PTR DS:[EBX] 0048C1B7 |. 8B82 EC000000 MOV EAX,DWORD PTR DS:[EDX+EC] 0048C1BD |. 8BCB MOV ECX,EBX 0048C1BF |. FFD0 CALL EAX 0048C1C1 |. 8BF8 MOV EDI,EAX 0048C1C3 |. E8 789EF8FF CALL SR_GameS.00444040 0048C1C8 |. 8B7C24 1C MOV EDI,DWORD PTR SS:[ESP+1C] 0048C1CC |. 8BF0 MOV ESI,EAX 0048C1CE |. E8 6D9EF8FF CALL SR_GameS.00444040 到目前为止我在c上写的是: void __cdecl Global() { __asm { mov msg,edi; //msg push ebx; mov ebx,dword ptr[esp+1C]; //playername mov playername,ebx; pop ebx; } printf("Global [%s] -> %sn",playername,msg); //then calling func entry CALL((DWORD)0x00444040); } 当0048C1CE被调用时,我将它放入我的c并将其参数移动到Global() 附:如果有可能解释装配线的情况. 对不起我的英文,提前致谢. 解决方法
我会抛开你为什么要这样做的问题.它可能是其他人的软件,他们可能没有给你许可.您可能在某处违反了许可证.
你的描述很纠结.汇编程序行不是函数,它们是具有3个函数调用的代码.我猜你的意思是你要拦截对函数0x00444040的调用以执行你自己的代码.你还没有表明你是如何做到的. C代码需要做大约三件事. >进入时,它必须符合其调用者所期望的调用顺序.在ESI和EDI中似乎有两个参数. 在调试器级别,只需确保每个寄存器(包括堆栈指针)与进入时相同,就在分支到钩子函数之前. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |