郁金香游戏辅助技术在线班-b002-016-C,C++主线程代码传递复杂参数的实现
#include "pch.h" #include "主线程调用CALL.h" #include <string> #include <fstream> #include <vector> #include <cstdio> #include <iostream> using namespace std; WNDPROC g_oldWindowProc = 0; // UINT_PTR _cdecl x86Call8_cdecl(UINT_PTR *argv) //数组传8个参数进来 { UINT_PTR retvar = 0; __asm { mov eax,argv push dword ptr[eax + 7 * 4] //参数6 push dword ptr[eax + 6 * 4] //参数5 push dword ptr[eax + 5 * 4] //参数4 push dword ptr[eax + 4 * 4] //参数3 push dword ptr[eax + 3 * 4] //参数2 push dword ptr[eax + 2 * 4] //参数1 mov ecx, dword ptr[eax + 1 * 4] //ecx参数 call dword ptr[eax + 0 * 4] //功能CALL add esp,0x18 //平栈7个参数 mov retvar,eax } return retvar; } LRESULT CALLBACK newWindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { switch (uMsg) { case WM_USER + 126: { #ifdef DEBUG printf("WM_USER + 126:pcall=%X begin\n", lParam); #endif // !DEBUG __asm { call lParam } #ifdef DEBUG printf("WM_USER + 126:pcall=%X End\n", lParam); #endif // !DEBUG return 123456; } case WM_USER + 128: { UINT_PTR *参数列表 = (UINT_PTR*)lParam; x86Call8_cdecl(参数列表); break; } case WM_USER + 138: { break; } } return CallWindowProcA(g_oldWindowProc, hwnd, uMsg, wParam, lParam); };