非常严肃的问题:关于Jeffrey Richter的HOOKAPI之后,堆栈平衡问题!弄明白,你们将终身受用!

hsly110 2005-07-14 09:34:26
今日有点时间弄了一下 HOOKAPI,发现有个还有个缺陷。
我把Jeffrey Richter的HOOKAPI 移植到MFC下,出现问题。

我写了一个 HookAPI.exe[一个MFC对话框] 和 HookAPI.dll[MFC常规DLL], 首先 HookAPI.exe 启动时,动态加载HookAPI.dll,然后获取HookAPI.dll导出的My_MessageBox 的函数地址。

再次:HookAPI.exe本身会自己加载user32.dll,然后我就利用Jeffrey Richter的HOOKAPI原理挂接"MessageBoxA",把user32.dll的MessageBoxA的地址改写为HookAPI.dll的My_MessageBox的函数地址。这样挂接完成。

为了测试效果,我创建一个按钮,代码如下:
void CTestRemoteInjectDlg::OnButton_Messagebox()
{
AfxMessageBox(_T("AAAAAAAAAA")) ;
}
此时,单击该按钮,达到了预期效果,而且很完美,堆栈平衡。

但是把 AfxMessageBox(_T("AAAAAAAAAA")) 换成下面形式
void CTestRemoteInjectDlg::OnButton_Messagebox()
{
::MessageBox(NULL, "HOOKAPI SUCCESS", "HOOKAPI", MB_OK) ; // API形式
}
结果,出现堆栈异常,我跟踪发现是堆栈没有平衡,汇编跟踪时,的确少了0x10ch那么多长度,恰好是MessageBox的4个参数堆栈。

但是我个人能力有限,到底如何 平衡此堆栈呢?
AfxMessageBox 为什么有能自动帮你平衡堆栈呢?

我需要学习,像你们大虾请教!

...全文
345 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsly110 2005-07-15
  • 打赏
  • 举报
回复
TO newbiestar()
不好意思 !不是 0x10ch,是 10h, 差10h ,16进制。呵呵

TO CrazyAzreal(卖血上网)
就是你所说参数数目呀。 最好建议,就是你要挂接哪个函数,自己定义的那个函数要与被挂接函数的类型和参数数目一样。这样就可以达到堆栈平衡了。

我返回跟踪,发现程序是这样比较堆栈的,当你的函数执行完毕后,基本按照如下进行堆栈检查

push xxx
push xxx
push xxx
cmp esi, esp // 堆栈检查,以后你们跟踪的时候,在这里看一下堆栈,看看差多少
call xxxxxxx // esp与esi 不一样,就call 堆栈异常处理

呵呵 !以后的分析在 bebug版下调试,不是发行版。
VC++ 6。0 SP6
CrazyAzreal 2005-07-15
  • 打赏
  • 举报
回复
楼主啊``能不能说说为什么啊``你是如何解决的 `
newbiestar 2005-07-15
  • 打赏
  • 举报
回复
0x10ch

===================
这个是什么东西?多少进制?还有h的?
hsly110 2005-07-15
  • 打赏
  • 举报
回复
呵呵,我这不是为了吸引更多的人来华山论剑!
问题已经解决了。

但是 windows核心编程,都没有说到,参数数目的问题。让我郁闷3个小时!
CrazyAzreal 2005-07-15
  • 打赏
  • 举报
回复
在外面看到觉得好高深。。。``咋一看``堆栈平衡`好高深哦`进来看了吓``原来是参数数目不对```
学习``

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧