zoukankan      html  css  js  c++  java
  • debug 和 release 版本间堆栈平衡的区别

    int /*WINAPI*/ MyMessageBox(  HWND hWnd,          
    			   LPCTSTR lpText,    
    			   LPCTSTR lpCaption,  
    				 UINT uType ) 
    {
    	MsgHook.UnHook();
    	MessageBox(NULL, "现在可以调用了", "结果", MB_OK);
    	MessageBox(hWnd, lpText, lpCaption, uType);
    
    	//	MsgHook.ReHook();
     
    	__asm
    	{
    		pop edi        //these was fund by debug 
    		pop esi
    		pop ebx
    /*		add esp,0x40*/  release not to use 
    		pop ebp
    		ret 0x10
    	}
    	return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
    	//没有hook前调用
    	MessageBox(NULL, "test", "test", MB_OK);
    	
    
    	MsgHook.Hook("User32.dll", "MessageBoxA", (PROC)MyMessageBox);	//hook掉MessageBoxA函数
    	 MessageBox(NULL, "test", "test", MB_OK);	//此时调用MessageBoxA,就会调用我们自己写的MyMessageBox函数
    
    
    	return 0;
    }


    高人指点:

    1、Debug版本,用堆栈传参, 你计算出压栈的参数个数,最后Sub esp就OK
    2、Release版本,会把一些堆栈传参的,优化为寄存器传参, Sub Esp的时候,要注意被优化后的堆栈大小

  • 相关阅读:
    vuerouter-2.路由跳转
    vuerouter-1.路由基础
    vuebase-11._跨域处理
    vuebase-10_Axios配置
    vuebase--9._axios post请求
    vuebase--8._axios
    vuebase-7.过滤器
    vuebase-6.自定义指令
    vuebase-5.过渡和动画
    vuebase---4.实例生命周期
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982437.html
Copyright © 2011-2022 走看看