inline hook MessageBox(2)
笔记
char *lpText1; ULONG my_esp; __declspec(naked) void MyMessageBoxA( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) { //printf("hook"); _asm { //pop hWnd //pop lpText //pop lpCaption //pop uType mov my_esp,esp; //先保存下需要用到的参数 pushad//然后保存整个堆栈 pushfd push eax mov eax, my_esp add eax, 8 mov eax,[eax] //不能直接 mov给变量,编译通不过 , 需要用eax 中转一下,听说是编译器的问题。 mov lpText1,eax; pop eax; } printf("MyMessageBoxA lpText: %s \r\n",lpText1); //lpText1已经是地址了 不需要&度地址赋。 _asm { popfd popad //把堆栈还原掉。 RETN 16; //把参数废除掉 4*n 屏蔽掉MessageBoxA } _asm { PUSH EBP //执行以下被HOOK掉的 头5个字节。 MOV EBP,ESP JMP newbark; //然后调回去 } }