windbg获取函数指针

文章详细描述了如何在Windows系统中使用FindWindowW和FindWindowExW函数,通过动态链接库和windbg调试工具追踪函数指针,以及在不同环境下查找并使用私有函数如Query_PrivateExW的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先写一个demo,查看FindWindowW FindWindowExW的函数指针
HMODULE hModule = LoadLibrary(L"user32.dll");
	if (hModule != NULL)
	{		
		while (true)
		{			
			FUN_FindWindowW FindWindowWFunc = (FUN_FindWindowW)GetProcAddress(hModule, "FindWindowW");
			if (FindWindowWFunc != NULL)
			{
				printf("FindWindowW 函数指针地址:%p\r\n", FindWindowWFunc);
				HWND hWnd = FindWindowWFunc(L"123", NULL);
			}
			FUN_FindWindowExW FindWindowExWFunc = (FUN_FindWindowExW)GetProcAddress(hModule, "FindWindowExW");
			if (FindWindowExWFunc != NULL)
			{
				printf("FindWindowExW 函数指针地址:%p\r\n", FindWindowExWFunc);
				HWND hWnd = FindWindowExWFunc(NULL,NULL, L"DingtalkMsgComming", NULL);
				int  n = (BYTE*)FindWindowExWFunc - (BYTE*)FindWindowWFunc;
				printf("指针偏移:%d 0X%X\r\n",n,n);

				FUN_FindWindowExW TextFun = (FUN_FindWindowExW)((BYTE*)FindWindowWFunc + n);
				printf("TextFun 函数指针地址:%p\r\n", TextFun);
				hWnd = TextFun(NULL, NULL, L"DingtalkMsgComming", NULL);
				int wjr = 0;

			}
			Sleep(5000);
		}
		FreeLibrary(hModule);
	}

windbg调试该程序 设置断点

bu USER32!FindWindowW

可以看到函数指针地址和打印出来的都一样的 都是**68483650

当函数命中时,地址也一致

按F8(t)一直往下走,耐心走

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值