我对汇编语言很陌生,所以我只想确保我了解这段代码中发生的事情:
400610: 83 ff 1d cmp $0x1d,%edi
400613: 7f 0c jg 400621 <f1+0x11>
400615: 89 f8 mov %edi,%eax
400617: c1 e0 04 shl $0x4,%eax
40061a: 8d 04 f8 lea (%rax,%rdi,8),%eax
40061d: 8d 04 78 lea (%rax,%rdi,2),%eax
400620: c3 retq
400621: c1 ff 02 sar $0x2,%edi
400624: 8d 47 11 lea 0x11(%rdi),%eax
400627: c3 retq
据我所知,跳到了400621,但是我不确定f1 + 0x11表示什么。
如果不跳,它将继续并将%eax向左移动4(乘以16),然后执行eax = rax + rdi * 8,然后执行eax = rax + rdi * 2?我不确定重复两次的目的是什么。
如果确实跳了,它将%eax向右移动2(除以4),然后我不确定(lea 0x11(%rdi),%eax)会做什么。
我们将不胜感激,谢谢!