linux – 帮助理解这段代码片段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 帮助理解这段代码片段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含920字,纯文字阅读大概需要2分钟。
内容图文
![linux – 帮助理解这段代码片段](/upload/InfoBanner/zyjiaocheng/970/4a3f69bb4081404abb3d7f0ec3182360.jpg)
这是内核代码中header.S文件的代码片段.我无法理解lretw指令的作用.我已经查看了很多在线资源来获取该指令.
# We will have entered with %cs = %ds+0x20, normalize %cs so
# it is on par with the other segments.
pushw %ds
pushw $6f
lretw
任何人都可以帮助我理解这个指令吗?
解决方法:
ret是从程序返回的指令.所以基本上它会将堆栈中的返回地址弹出到EIP寄存器中.
l前缀在这里告诉它它是程序的远程返回.在这种情况下,指令首先将一个值从堆栈弹出到EIP寄存器,然后将第二个值弹出到CS寄存器中.
w后缀在这里是因为在这一步我们以实模式运行,操作数是16位宽.
确切的代码是:
pushw %ds
pushw $6f
lretw
6:
6:在这里非常重要.这样做的目的是:将ds的值压入堆栈,将6标签的地址压入堆栈,然后触发此lretw指令.基本上,它会将标签6的地址加载到指令指针寄存器中,并使用ds寄存器的值加载cs寄存器.因此,这只是通过更改cs寄存器值继续在标签6执行的技巧.
您应该下载http://www.intel.com/design/intarch/manuals/243191.htm,它提供所有指令的精确详细信息,包括详细说明每条指令正在执行的伪代码.
内容总结
以上是互联网集市为您收集整理的linux – 帮助理解这段代码片段全部内容,希望文章能够帮你解决linux – 帮助理解这段代码片段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。