我是
靠谱客的博主
眼睛大大米,最近开发中收集的这篇文章主要介绍
一个堆栈溢出的例子,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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
最后
以上就是眼睛大大米为你收集整理的 一个堆栈溢出的例子的全部内容,希望文章能够帮你解决 一个堆栈溢出的例子所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复