为什么编译器在这个函数的中间放了一个15字节的nop?

时间:2016-12-12 05:07:50

标签: assembly x86 x86-64 compiler-optimization

我正在使用反编译器,我的一个朋友给我发了一个他写的小程序。一个函数有一个有趣的输出,并检查反汇编,我发现它很无聊,除了在它的中间有一个15字节的nop:

0000000100001300 <_strhash>:
   100001300:   55                      push   rbp
   100001301:   48 89 e5                mov    rbp,rsp
   100001304:   8a 0f                   mov    cl,BYTE PTR [rdi]
   100001306:   31 c0                   xor    eax,eax
   100001308:   84 c9                   test   cl,cl
   10000130a:   74 2b                   je     100001337 <_strhash+0x37>
   10000130c:   48 ff c7                inc    rdi
   10000130f:   31 d2                   xor    edx,edx
   100001311:   66 66 66 66 66 66 2e    data16 data16 data16 data16 data16 nop WORD PTR cs:[rax+rax*1+0x0]
   100001318:   0f 1f 84 00 00 00 00 
   10000131f:   00 
   100001320:   0f b6 c9                movzx  ecx,cl
   100001323:   89 d0                   mov    eax,edx
   100001325:   c1 e0 05                shl    eax,0x5
   100001328:   29 d0                   sub    eax,edx
   10000132a:   01 c8                   add    eax,ecx
   10000132c:   8a 0f                   mov    cl,BYTE PTR [rdi]
   10000132e:   48 ff c7                inc    rdi
   100001331:   84 c9                   test   cl,cl
   100001333:   89 c2                   mov    edx,eax
   100001335:   75 e9                   jne    100001320 <_strhash+0x20>
   100001337:   5d                      pop    rbp
   100001338:   c3                      ret

我甚至不知道x86指令可以达到15个字节。

这个大笨蛋有什么好处?

0 个答案:

没有答案