所以基本上我试图在32位Linux,ELF二进制文件上重用一些从objdump
反汇编的asm代码。
在反汇编的文件中,我看到了这条指令:
8057a01: f3 c3 repz ret
当我尝试在我的asm代码中重用repz ret
时,出现了此错误:
Error: expecting string instruction after `repz'
我尝试像这样指定ret
类型:
repz retq
但我仍然遇到同样的错误..
有人能给我一些帮助吗?
答案 0 :(得分:4)
您的汇编程序可能没有准备好使用repz
。
repz
指令前面时, ret
本身不会做任何事情,但有时会使用它来防止直接跳转到ret
指令 - 用于填充,基本上 - 因为直接跳转到ret
在某些CPU型号上性能不佳。
您应该能够使用db
序列对指令组合进行编码。
答案 1 :(得分:3)
解决方案很简单,您只需将repz
和ret
放在两个连续的行上即可。另请注意,此优化已过时,如果您的ret 0
是分支目标,则AMD现在建议使用ret
(即使是淘汰)。事实上,对于更新的AMD芯片,不需要整个优化,因为分支预测器的工作方式不同。