我是靠谱客的博主 眼睛大大米,最近开发中收集的这篇文章主要介绍 一个堆栈溢出的例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.DLL lib

LIBRARY       " XXX.DLL "

EXPORTS

    Initialize               @
1  PRIVATE
    

 

void  __stdcall Initialize( int  nParam1, int  nParam2, int  nParam3 = 0 )
{
       ......
}

 2. 宿主程序

 

typedef  long  (WINAPI *  InitializeProc)( int  nParam1, int  nParam2)

 

InitializeProc pfnInitialize  =  (InitializeProc )GetProcAddress(hInstance,  " Initialize " );
if (m_pfnInitialize )
         pfnInitialize (
1 , 2 );

 

===============

当callInitialize函数时按照stdcall压栈顺序,先把2,1,return addr 压入栈中,而实际上Initialize会把return addr当作第三个参数nParam3,一旦函数执行完毕,会把错误的地址作为return addr引起程序crash

最后

以上就是眼睛大大米为你收集整理的 一个堆栈溢出的例子的全部内容,希望文章能够帮你解决 一个堆栈溢出的例子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部