【问题标题】:ASM Call instruction cause a stack overflow?ASM 调用指令导致堆栈溢出?
【发布时间】:2014-01-16 00:26:55
【问题描述】:

这是我的 ASM 功能代码:

PUSH EBP
MOV EBP, ESP
SUB ESP, 8
CALL 00401E20
LEAVE
RETN

0x00401E20 有一个函数,它不带参数也不返回任何值。调用函数的正确方法是什么?

OllyDbg 说“堆栈溢出”并注释第 4 行。抱歉,我是 ASM 新手,有什么想法吗?

提前致谢。

【问题讨论】:

  • 您需要进入该函数以查看真正导致崩溃的原因。
  • 感谢您的评论。我怎样才能做到这一点?请在下面查看我的评论,这就是我认为导致崩溃的原因。
  • 你的问题似乎是如何使用ollydbg,网上有很多教程。请记住,step overstep into(快捷键:F7)之间是有区别的。
  • 是的,我想我应该阅读一篇关于 OllyDbg 的好教程。谢谢!

标签: assembly x86 stack-overflow


【解决方案1】:

也许你应该在离开和返回之前尝试 POP。

试试这个:

PUSH EBP
MOV EBP, ESP
SUB ESP, 8

CALL 00401E20

MOV ESP, EBP
POP EBP

LEAVE
RETN

【讨论】:

  • 谢谢,但它不起作用:-(。更具体地说,OllyDbg 评论:CALL DWORD PTR DS:[1000A000]。还有其他想法吗?
  • 哦,对不起,我的错。地址错了,现在可以了。谢谢!
  • 您在返回之前不需要popleave 会处理完结语。
  • @Gunner 哦,是的,没错。这就是维基百科所说的。顺便说一句,我接受了这个答案以表示感谢。 :lol 谢谢!
  • @Gunner 总是很高兴知道。反正 cdonts 说他是 ASM 新手,所以这个手动弹出来理解流程也不错
猜你喜欢
  • 1970-01-01
  • 2020-12-17
  • 2015-05-21
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
相关资源
最近更新 更多