如何在 push+ret 方法中传递参数?

How to pass arguments in push+ret method?

如果我用call

push b
push a
call address

有效,但使用 call 让我对地址感到困惑。
所以我想像这样使用 push+ret 方法:

push b
push a
push address
ret

但这一次,传递参数看起来不正常。
如何使用此方法传递地址?

call address

这条近距离呼叫指令做了两件事:

  • 它将 return 地址放在堆栈上,这是 call address 指令本身之后的内存地址。
  • 它通过更改 EIP 寄存器将控制转移到 地址 的代码。

您的替换代码执行后一个操作。

要更正代码,请手动推送一个 return 地址:

    push b
    push a
    push Back
    push address
    ret
Back:

这次你会发现传递参数的效果是一样的。


使用这种替代方法,完全可以将 Back: 标签放置在您喜欢的任何地方 以及它有意义的地方!