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

拦截MESSAGEBOXA后修改为什么不成功?

楼主BigBen(江南草)2002-01-23 08:47:58 在 其他开发语言 / 汇编语言 提问

近来学windows下汇编,试着改用delphi做的一个程序,不成功。  
  具体如下:  
  在form上放一个button,button的onclick事件中就执行一句:  
  messagebox(application.handle,'HELLO,WORLD!','Test',mb_ok);  
  用ice拦messageboxa,看到调用处是  
  push   00  
  push   0044eddc    
  push   00xxxxxx   //此处对应的就是那两个串所在  
  mov   eax,[xxxxxxx]  
  mov   ....   //这里几条指令得到application.handle到eax中也是对的  
  mov   ....  
  call   user32!MESSAGEBOXA  
  ret  
  add   ....//此处开始就是messageboxa用的两个串参数的开始  
   
  我尝试把那条call指令改成   mov   eax,1  
  但运行报访问地址异常。。。若只用api写,不要vcl控件,这样改却是可以的。  
  哪位能指点一下?谢谢了。 问题点数:100、回复次数:4Top

1 楼DingBoy()回复于 2002-01-24 01:10:33 得分 0

晕~~   你简单把call   改   mov   会把堆栈破坏,MESSAGEBOXA里面   会把清堆栈参数。Top

2 楼BigBen(江南草)回复于 2002-01-24 08:43:11 得分 0

?  
  清栈有指令做这啊(ret)。如果是pascal调用,被调用者自己清;如果是stdcall也是如此。  
  若不要清就随它去呗。Top

3 楼DingBoy()回复于 2002-01-24 16:05:40 得分 100

ret只是返回,在MESSAGEBOXA中有个ret   10  
   
  ret   10才是清堆栈。  
   
  Top

4 楼BigBen(江南草)回复于 2002-01-25 08:22:47 得分 0

谢谢DingBoy()。  
  我是看的网上的破解教程这么做的,没仔细想。  
  Top

相关问题

  • 如何拦截Windows的消息并加以修改(高分)
  • 如何解决 串口数据拦截,并修改后再发送出去?
  • 修改用户口令(SQL2000),在前台怎样得到修改成功的行数,以确认成功。
  • 请问AfxMessageBox()到底调用了那个API函数,又如何拦截它,我拦截了MessageBoxA,MessageBoxW,MessageBoxExA,MessageBoxExW四个函数,都
  • 我想修改debug.exe但是为什么没有成功?
  • 我用ADOX修改列的属性,怎么不成功?
  • 为什么修改系统初始化参数不成功??
  • 通过ado连接到数据库,如果连接不成功,怎样拦截错误.
  • 当数据库连接不成功时,该如何拦截?并将之导到连接配置窗体中去?
  • 怎样拦截所有用户从exchange服务器发出的邮件,部署应用,并能够修改这些邮件属性

关键词

  • 指令
  • messageboxa
  • 堆栈
  • 调用
  • ret
  • mov
  • push
  • eax
  • call

得分解答快速导航

  • 帖主:BigBen
  • DingBoy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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