高手帮忙看一下,hook源代码下载后可是在vs2005 c++中无法实现啊???谢谢了

zixu869 2008-12-24 09:49:55
#include"stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <dbghelp.h>
#pragma comment(lib,"dbghelp.lib")
#pragma comment(lib,"user32.lib")
typedef int (__stdcall *old_messagebox)( hwnd hwnd, lpctstr lptext, lpctstr lpcaption,uint utype );
old_messagebox g_procoldmessagebox = null;
int __stdcall hook_messagebox( hwnd hwnd, lpctstr lptext, lpctstr lpcaption,uint utype)
{
printf("%s\t%d\r\n",__function__,__line__);
if (null != g_procoldmessagebox)
return g_procoldmessagebox(hwnd,lptext,"不好意思,hook到了!",utype);
else
return messagebox(hwnd,lptext,lpcaption,utype); ;
}


int replace_iat(const char *pdllname,const char *papiname,bool breplace)
{
handle hprocess = ::getmodulehandle (null);
dword dwsize = 0;
pimage_import_descriptor pimageimport = (pimage_import_descriptor)imagedirectoryentrytodata(hprocess,true,
image_directory_entry_import,&dwsize);
if (null == pimageimport)
return 1;
pimage_import_by_name pimageimportbyname = null;
pimage_thunk_data pimagethunkoriginal = null;
pimage_thunk_data pimagethunkreal = null;
while (pimageimport->name)
{
if (0 == strcmpi((char*)((pbyte)hprocess+pimageimport->name),pdllname))
{
break;
}
++pimageimport;
}
if (! pimageimport->name)
return 2;
pimagethunkoriginal = (pimage_thunk_data)((pbyte)hprocess+pimageimport->originalfirstthunk );
pimagethunkreal = (pimage_thunk_data)((pbyte)hprocess+pimageimport->firstthunk );
while (pimagethunkoriginal->u1.function)
{
if ((pimagethunkoriginal->u1 .ordinal & image_ordinal_flag) != image_ordinal_flag)
{
pimageimportbyname = (pimage_import_by_name)((pbyte)hprocess+pimagethunkoriginal->u1 .addressofdata );
if (0 == strcmpi(papiname,(char*)pimageimportbyname->name))
{
memory_basic_information mbi_thunk;
virtualquery(pimagethunkreal, &mbi_thunk, sizeof(memory_basic_information));
virtualprotect(mbi_thunk.baseaddress,mbi_thunk.regionsize, page_readwrite, &mbi_thunk.protect);
if (true == breplace)
{
g_procoldmessagebox =(old_messagebox) pimagethunkreal->u1.function;
pimagethunkreal->u1.function = (dword)hook_messagebox;
}
else
pimagethunkreal->u1.function = (dword)g_procoldmessagebox;
dword dwoldprotect;
virtualprotect(mbi_thunk.baseaddress, mbi_thunk.regionsize, mbi_thunk.protect, &dwoldprotect);
break;
}
}
++pimagethunkoriginal;
++pimagethunkreal;
}
return 0;
}
int main()
{
replace_iat("user32.dll","messageboxa",true);
messagebox(null,"enumiat user32.dll messageboxa true;","",mb_ok);
replace_iat("user32.dll","messageboxa",false);
messagebox(null,"enumiat user32.dll messageboxa false;","",mb_ok);
return getchar();
}
...全文
49 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzh9955 2008-12-25
  • 打赏
  • 举报
回复
编译器的各参数是否设置正确?
arong1234 2008-12-24
  • 打赏
  • 举报
回复
hook往往是对操作系统何编译器都敏感的,同样的代码,换个操作系统版本、换个编译器,可能完全不工作。这就要求你真去理解代码的原理,而不是抄人家代码
内容概要:本文针对考虑算力负荷时空迁移特性的多微电网与共享储能系统的协同优化调度问题展开研究,并提供了完整的Matlab代码实现。研究构建了融合算力负荷动态迁移特征的数学优化模型,通过引入共享储能机制,实现多微电网间的能量互济与资源协同,有效提升系统对分布式能源波动性和负荷不确定性的适应能力。文采用先进的优化算法求解该调度模型,重点解决了算力任务在时空维度上的灵活调配与电力供需平衡之间的耦合关系,旨在提高综合能源系统的运行经济性、可靠性与灵活性。所提出的方法为未来能源互联网背景下电-算协同管理提供了理论支持与技术路径。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员、高校研究生,尤其适用于从事微电网运行、共享储能配置、综合能源系统优化以及电-算融合等领域研究的专业技术人员。; 使用场景及目标:①开展多微电网与共享储能系统的协同调度策略设计与仿真验证;②支撑高比例可再生能源接入下的新型电力系统优化运行研究;③为考虑算力迁移的数据心与电网协同调度提供建模与算法参考;④作为高水平学术论文撰写或学位课题研究的技术支撑与代码复现平台。; 阅读建议:建议读者结合Matlab代码与相关学术文献深入研读,重点关注目标函数构建、约束条件设定及求解器调用逻辑,可在现有模型基础上拓展多时间尺度优化、不确定性建模(如鲁棒优化、随机规划)或加入实际工程约束进行二次开发与深化研究。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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