为了账号安全,请及时绑定邮箱和手机立即绑定

问题是现在一调用就会导致程序崩溃,我想知道可能会是什么原因?栈没平吗?应该怎么做

问题是现在一调用就会导致程序崩溃,我想知道可能会是什么原因?栈没平吗?应该怎么做

杨魅力 2023-02-11 22:18:45
假设某程序的反汇编代码如下ESP:00000000push ebx 这句执行后:ESP:00000004push esi 这句执行后:ESP:00000008push eax 这句执行后:ESP:0000000ccall 50b890 这句执行后:ESP:0000000cadd esp,c 这句执行后:ESP:00000000retn------------------我现在要自编一段代码注入的程序中,目的是要从外部调用50b890那个CALL代码如下:pushadpush ebxpush esipush eaxcall 50b890add esp,cpopadretn
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

是的,你需要自己弹栈
正如你提供的代码。
add esp,c
汇编里的函数一般都不自己进行栈操作,而是需要调用者去进行

查看完整回答
反对 回复 2023-02-15
?
翻阅古今

TA贡献1780条经验 获得超5个赞

信息不全,不好解决。 
call 50b890 ,其中50b890 是哪里的外部调用。是在目标进程空间的调用吗? 
call 50b890 有几个参数?push ebx push esi 不知道是保护环境的还是参数。 
call 50b890 是什么方式平栈的?deiphi的和vc的有区别,(应该不是系统API的吧) 
你试试add esp,4看看,可能它只有一个参数(push eax),同时还需要pop ebx, pop esi。或者将这句取消,它内部已经平栈了。或者将这句取消,并且加pop ebx, pop esi恢复环境。 
如果你能调试,那就好判断了。pushad后的esp和popad前的应该一致。 
还有一个,你的call 50b890 需要做什么操作,CALL返回后的寄存器里的值是否有用,如果有用,就不能popad,会将有用的值覆盖掉的

查看完整回答
反对 回复 2023-02-15
  • 2 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号