这些指令执行后esp的值是多少?

What is esp's value after these instructions are executed?

如果esp寄存器在这一系列指令开始时的值为0xbfffee34,那么这些指令执行后esp的值是多少?假设我们使用标准的 32 位 x86 linux 调用约定。

8049860: add [=10=]x44, %esp

8049863: pop %ebx

8049864: pop %esi

8049865: pop %ebp

8049866: ret

每个 pop 指令都会在 x86 上将 esp 递增 4,而 ret 指令将从堆栈中弹出调用者的 eip,因此也会递增 esp 通过 4.

所以 esp 在这些指令之后的值将是

ESP = 0xbfffee34 + 0x44 + 0x4 + 0x4 + 0x4 + 0x4 = 0xbfffee88