Я очень новичок в сборке, поэтому я просто хочу убедиться, что я понимаю, что происходит в этом коде:
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) делает.
Помощь будет оценена, спасибо!