问题1:
挂钩程序自身的MessageBoxA,在自定义的函数中不可以调用原来的MessageBoxA了,只有先保存原函数的地址然后才可以调用。但如果做个dll挂钩其它进程中的MessageBoxA,在自定义的函数中就不需要保存原来的函数地址可以直接调用。不明白这是为什么,请大虾们帮我分析下~问题2:
挂钩某个进程中的MessageBoxA,但无法挂钩AfxMessageBox,必须挂钩所有进程中的MessageBoxA,请详细解释下原因
挂钩程序自身的MessageBoxA,在自定义的函数中不可以调用原来的MessageBoxA了,只有先保存原函数的地址然后才可以调用。但如果做个dll挂钩其它进程中的MessageBoxA,在自定义的函数中就不需要保存原来的函数地址可以直接调用。不明白这是为什么,请大虾们帮我分析下~问题2:
挂钩某个进程中的MessageBoxA,但无法挂钩AfxMessageBox,必须挂钩所有进程中的MessageBoxA,请详细解释下原因
解决方案 »
- 中文简体转繁体
- 迷惑啊,关于位操作符&=,|=的一点小问题?
- UDP通讯里面这个方法是做什么的?高手指点下(100)
- 求助!~~!~!~!~!~!~!~!~!~!
- left operand must be l-value
- 关于多线程访问CWnd时不能得到句柄(强劲的问题,向高手请教)。
- 谁能给一个win2000server下合并硬盘分区的工具的下载地址,急用,另外送分!
- VC++ gSOAP 谁做成功的阿......找了好多资料都不成功..谢谢各位大侠了
- 新手的请教!
- 有谁用过MS Flex Grid控件啊,快点帮帮我。
- 我想抓取mpg视频中的帧,老不稳定
- Sleep与Wait...函数的问题
这个问题解决了,新的疑惑又来了:
以下是部分代码
// 定义MessageBoxA函数原型
typedef int (WINAPI *PFNMESSAGEBOX)(HWND, LPCSTR, LPCSTR, UINT uType);
// 保存MessageBoxA函数的真实地址
PROC g_orgProc = (PROC)MessageBoxA;// 用于替换MessageBoxA的自定义函数
int WINAPI MyMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
return ((PFNMESSAGEBOX)g_orgProc)(hWnd, "新函数", "HookDemo", MB_ICONINFORMATION);
}即使保存过了原函数的地址,调用还是要通过IAT呀,但是IAT已经改变了呀,为什么又可以调用了呢??
我要反驳你的观点,照你的说法,那么挂钩程序自身的MessageBoxA,在自定义的函数中应该是直接可以调用原来的函数呀,因为MessageBoxA是函数地址呀(没有通过IAT呀)!!
IAT是地址的集合