拦截MESSAGEBOXA后修改为什么不成功?
近来学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服务器发出的邮件,部署应用,并能够修改这些邮件属性




