1. ホーム
  2. linux

[解決済み] retqとretの違いは何ですか?

2022-02-09 03:36:07

質問内容

引数の符号なし2乗を計算する、次のプログラムを考えてみよう。

.global foo
.text
foo:
    mov %rdi, %rax
    mul %rdi
    ret

これは、きちんとコンパイルされた as しかし、ディスアセンブルすると

0000000000000000 <foo>:
   0:   48 89 f8                mov    %rdi,%rax
   3:   48 f7 e7                mul    %rdi
   6:   c3                      retq   

とは何か違いがあるのでしょうか? retretq ?

解決方法は?

ロング(64ビット)モードでは、( ret ) に、スタックからクワッドワードアドレスをポップして、そのアドレスを %rip .

32ビットモードでは、( ret ) にスタックからドワードアドレスをポップすることによって %eip .

のようなツールもあります。 objdump -d は最初のものを呼び出します。 retq . これは単なる名前であり、命令のエンコーディングはどちらでも同じです ( C3 ).