CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

请问一个运行中的EXE程序通过什么途径可以修改自己磁盘上EXE文件的内容?

楼主hateMonday(天行)2005-08-03 20:12:11 在 VC/MFC / 进程/线程/DLL 提问

谢谢! 问题点数:100、回复次数:8Top

1 楼zhanwt(zhanwt)回复于 2005-08-03 20:16:37 得分 0

1用记事本打开,然后乱改:)  
  2反汇编Top

2 楼hateMonday(天行)回复于 2005-08-03 20:28:48 得分 0

通常任何试途修改或删除正在运行的程序文件都会被提示"拒绝访问"怎么办?Top

3 楼masterz(www.fruitfruit.com)回复于 2005-08-03 20:36:11 得分 100

可以这么做:先给自己(A.exe)做一个copy(B.exe),修改B.exe  
  然后CreateProcess调用B.exe,通过参数告诉她用B.exe覆盖A.exe就完成了修改。  
  B.exe可以用网络上的方法自己删除自己  
  BOOL   SelfDelete()    
  {    
  SHELLEXECUTEINFO   sei;    
  TCHAR   szModule   [MAX_PATH],    
  szComspec[MAX_PATH],    
  szParams   [MAX_PATH];   //   get   file   path   names:    
  if((GetModuleFileName(0,szModule,MAX_PATH)!=0)   &&    
  (GetShortPathName(szModule,szModule,MAX_PATH)!=0)   &&    
  (GetEnvironmentVariable(_T("COMSPEC"),szComspec,MAX_PATH)!=0))    
  {    
  //   set   command   shell   parameters    
  lstrcpy(szParams,_T("/c   del   "));    
  lstrcat(szParams,   szModule);    
  lstrcat(szParams,   _T("   >   nul"));   //   set   struct   members    
  sei.cbSize   =   sizeof(sei);    
  sei.hwnd   =   0;    
  sei.lpVerb   =   _T("Open");    
  sei.lpFile   =   szComspec;    
  sei.lpParameters   =   szParams;    
  sei.lpDirectory   =   0;    
  sei.nShow   =   SW_HIDE;    
  sei.fMask   =   SEE_MASK_NOCLOSEPROCESS;   //   increase   resource   allocation   to   program    
  SetPriorityClass(GetCurrentProcess(),    
  REALTIME_PRIORITY_CLASS);    
  SetThreadPriority(GetCurrentThread(),    
  THREAD_PRIORITY_TIME_CRITICAL);    
  //   invoke   command   shell    
  if(ShellExecuteEx(&sei))    
  {    
  //   suppress   command   shell   process   until   program   exits    
  SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);    
  SetProcessPriorityBoost(sei.hProcess,TRUE);    
  //   notify   explorer   shell   of   deletion    
  SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);    
  return   TRUE;    
  }    
  else   //   if   error,   normalize   allocation    
  {    
  SetPriorityClass(GetCurrentProcess(),    
  NORMAL_PRIORITY_CLASS);    
  SetThreadPriority(GetCurrentThread(),    
  THREAD_PRIORITY_NORMAL);    
  }    
  }    
  return   FALSE;    
  }Top

4 楼hateMonday(天行)回复于 2005-08-03 20:42:16 得分 0

可是如果A.exe很大,copy一个效率不是很差?Top

5 楼masterz(www.fruitfruit.com)回复于 2005-08-03 20:58:38 得分 0

这种方法是可行的,直接修改运行中的文件比较困难,而且不兼容  
  你也可以在资源中包含一个比较小的程序,需要的时候把它释放出来实现对主程序文件的修改,当然主程序要退出后才能改Top

6 楼hateMonday(天行)回复于 2005-08-03 22:05:09 得分 0

thanksTop

7 楼dirdirdir3(风)回复于 2005-08-03 22:12:38 得分 0

删除也可以用同样的办法啊,由A来删除B.Top

8 楼lbird(heng)回复于 2005-08-04 14:04:55 得分 0

markTop

相关问题

  • 小弟不才,请教各位一个问题?如何才能,在Exe文件运行时,删除它在磁盘上的备份??
  • 急,磁盘错误,程序运行很慢!
  • exe不能运行
  • 如何在运行时从磁盘读取打开一个BMP图片?
  • ????运行一个exe文件
  • exe文件不能运行?
  • exe文件不能运行。
  • 运行exe和inputbox问题
  • 运行exe和inputbox问题
  • 在IE里运行exe

关键词

  • 修改
  • 文件
  • sei
  • szparams
  • szmodule
  • szcomspec
  • 程序
  • 删除
  • max
  • exe

得分解答快速导航

  • 帖主:hateMonday
  • masterz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo