在x86(汇编)中,[repz retq]有效吗?

时间:2017-08-06 23:45:55

标签: assembly x86

我有一个非常简单的测试二进制文件,我正在用objdump查看。我看到一个令我困惑的汇编指令。代码如下所示:

int main(int argc, char* argv[]){
    return 42;
}

当我做objdump -d test时,我看到了一个有趣的功能:

00000000004004a0 <__do_global_dtors_aux>:
  4004a0:       80 3d 85 0b 20 00 00    cmpb   $0x0,0x200b85(%rip)       # 60102c <_edata>
  4004a7:       75 11                   jne    4004ba <__do_global_dtors_aux+0x1a>
  4004a9:       55                      push   %rbp
  4004aa:       48 89 e5                mov    %rsp,%rbp
  4004ad:       e8 7e ff ff ff          callq  400430 <deregister_tm_clones>
  4004b2:       5d                      pop    %rbp
  4004b3:       c6 05 72 0b 20 00 01    movb   $0x1,0x200b72(%rip)        # 60102c <_edata>
  4004ba:       f3 c3                   repz retq 
  4004bc:       0f 1f 40 00             nopl   0x0(%rax)

从那里开始第二个,指令是f3 c3repz retq。现在在x86指令集引用中查找f3,我发现这是一个遗留前缀。

enter image description here

enter image description here

所以c3 / ret肯定不是列在它之前的列出的有效指令之一,所以我想知道为什么我的二进制文件正在这样做。

我正在执行这样的gcc(4.8.5):

gcc -g -Wall  -c src/test.c -o obj/test.o
gcc -g -Wall  obj/test.o -o bin/test

0 个答案:

没有答案