这些指令执行后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
如果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