【发布时间】:2017-05-07 17:26:16
【问题描述】:
我熟悉PCASM 的书,但我不明白一件事(这可能只是我的误解,我对低级编程还是新手)。据说c调用约定类似于
- 将参数推入堆栈
- 使用
call指令调用子程序,其中包括将返回地址压入堆栈 - 请参阅将常量偏移量添加到
ESP的参数 - 完成后调用
ret,它将弹出返回地址(如果您愿意,还可以选择弹出参数)并使用它跳转回调用代码
到目前为止一切都很好,但是示例表明返回码只是堆栈上的四个字节。这允许在当前代码段的任何地方跳转,但是如果子程序必须返回另一个段怎么办?如果代码段必须以与返回地址相同的方式入栈,应该如何引用子程序中的参数(因为它们在近和远返回时会有不同的偏移量)?
【问题讨论】: