如何在 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: 标签放置在您喜欢的任何地方 以及它有意义的地方!
如果我用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: 标签放置在您喜欢的任何地方 以及它有意义的地方!