В чем разница между mov ebx, esi и lea ebx, [esi]

Я работаю над упражнением в руководстве по шеллкодерам.

Section .text

  global _start

_start:

  jmp short GotoCall

shellcode:
  pop esi
  xor eax, eax
  mov byte [esi + 7], al
  lea ebx, [esi]
  mov long [esi + 8], ebx
  mov long [esi + 12], eax
  mov byte al, 0x0b
  mov ebx, esi
  lea ecx, [esi + 8]
  lea edx, [esi + 12]
  int 0x80

GotoCall:

  Call shellcode
  db ‘/bin/shJAAAAKKKK’

Этот код работает нормально, но я не понимаю строки lea ebx, [esi] а также mov ebx, esiони оба хранят одно и то же значение в ebx. Фактически, если я запускаю его через gdb, я вижу, что значения регистра не меняются.

Я понимаю, что mov обращается к значению по адресу и оставляет доступ только по адресу. Если в инструкции mov в этом сценарии были скобки вокруг esi, как в mov ebx, [esi] - тогда я вижу разницу, но это не тот случай, что мне не хватает?

0 ответов

Другие вопросы по тегам