我正在使用shellcoders手册进行练习。
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访问地址的值,而lea只访问地址。如果这个场景中的mov指令在es ebx周围有esi,[esi] - 然后我可以看到差异,但事实并非如此,我错过了什么?