汇编代码 编译出现-invalid instruction suffix for push
 2018.08.29    |      汇编    |     AilsonJack    |     暂无评论    |     3976 views
By: Ailson Jack
Date: 2018-08-29
个人博客: http://www.only2fire.com/
<p style="text-indent: 2em;">最近在阅读《<span style="color: rgb(0, 112, 192);">Linux内核完全注释</span>》这本书,试图多了解Linux内核的运行过程。书中当然也涉及到汇编代码的编写。这本书的阅读笔记,应该会在后面陆续的发布,敬请期待吧<img src="/UEditor/dialogs/emotion/images/face/i_f01.gif"/>。</p><p style="text-indent: 2em;">在Linux系统中,使用AT&amp;T语法编写汇编代码时,遇到了一个问题,就是编译代码时会出现问题:&quot;<span style="color: rgb(255, 0, 0);">invalid instruction suffix for push</span>&quot;。</p><p style="text-indent: 2em;">我的编译环境:<span style="color: rgb(0, 112, 192);">Ubuntu 14.04 x86_64</span>,在终端中执行命令:<span style="color: rgb(255, 0, 0);">as -o callee.o callee.s</span>,此时就出现了错误提示:<span style="color: rgb(255, 0, 0);">invalid instruction suffix for push</span>,截图如下:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.29/1535530758319558.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.29/1535530758319558.png&#39;)"/></p><p style="text-indent: 2em;">错误原因是,在64位系统和32位系统的as命令对于某些汇编指令的处理支持不一样造成的。在文件<span style="color: rgb(0, 112, 192);">callee.s</span>中,包含指令:<span style="color: rgb(0, 112, 192);">pushl&nbsp; %ebp</span>,该指令在64位系统下就编译不过。</p><p style="text-indent: 2em;">解决方法:在<span style="color: rgb(0, 112, 192);">callee.s</span>中,在代码头部添加<span style="color: rgb(0, 112, 192);">.code32</span>即可:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.29/1535530771721589.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.29/1535530771721589.png&#39;)"/></p><p style="text-indent: 2em;">然后再次编译该汇编文件,编译顺利通过。如果还有其他的问题,欢迎留言讨论。<br/></p>
欢迎关注博主的公众号呀,精彩内容随时掌握:
热情邀请仔细浏览下博客中的广告,万一有对自己有用或感兴趣的呢。◕ᴗ◕。。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^,当然了能够赞赏博主,那就非常感谢啦!
注: 转载请注明出处,谢谢!^_^
暂无评论,要不要来个沙发
发表评论

 
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号