assembly - ASM Call指令导致堆栈溢出?

标签 assembly x86 stack-overflow

这是我的 ASM 函数代码:

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

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

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

提前致谢。

最佳答案

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

试试这个:

PUSH EBP
MOV EBP, ESP
SUB ESP, 8

CALL 00401E20

MOV ESP, EBP
POP EBP

LEAVE
RETN

关于assembly - ASM Call指令导致堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21151165/

相关文章:

assembly - CPU 从用户模式切换到内核模式 : What exactly does it do? 它是如何进行这种转换的?

assembly - 'instruction prefixes' 在现代 x86 中意味着什么

java - 是什么导致 AWTEventMulticaster.mouseEntered() 无限递归?

haskell - 如何避免Haskell中的stackoverflow错误

caching - 如何找到 x86 处理器的 cpu 缓存大小

c - avr gcc 内联 asm 变量输入操作数

macos - 为什么使用 jmp 会阻止 Clang 汇编器计算出 .fill 的绝对表达式?

x86 - DC PMM(内存模式)缓存​​一致性如何表现?

gcc - 使用Cygwin gcc编译+链接自定义操作系统:无法识别的仿真模式:elf_i386

c++ - 在函数调用时获取堆栈溢出