Проблемы с пониманием LEA сборки - PullRequest
0 голосов
/ 21 ноября 2018

Я очень новичок в сборке, поэтому я просто хочу убедиться, что я понимаю, что происходит в этом коде:

  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) делает.

Помощь будет оценена, спасибо!

...