繁体   English   中英

x86 ASM:如何实现返回不同的代码段?

[英]x86 ASM: how return to different code segment is implemented?

我已经熟悉PCASM书籍,但我一无所知 (可能只是我的误解,我还是低级编程的新手)。 有人说c调用约定类似于

  • 将参数推入堆栈
  • 使用call指令来调用该子例程,该子例程除其他事项外,还将把返回地址压入堆栈
  • 请参阅为ESP添加常量偏移量的参数
  • 完成后调用ret ,它将弹出返回地址(然后根据需要弹出参数),并使用它跳回到调用代码

到目前为止,一切都很好,但是示例表明返回代码只是堆栈上的四个字节。 这允许在当前代码段上跳转到任何地方,但是如果子例程必须返回到另一个段怎么办? 如果必须以与返回地址相同的方式将代码段压入堆栈,那么应该如何引用子例程中的参数(因为它们在近距和远距返回时会有不同的偏移量)?

retf指令执行包括分段和偏移量的“长返回”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM