调用函数后%esp会发生什么?

时间:2017-06-12 17:22:11

标签: assembly x86 att

我正在做一些装配练习,并想出了一个我无法解决的问题。他们告诉我%esp = 0x08c28f6a。 然后他们告诉我有一个功能:

功能:movw 0(%esp),%bx;

....

保留

0x80482ae:call funct;

0x80484a4:XXXXXXX;

我不明白调用函数后%esp和%bx的值是什么,0(%esp)的含义对我来说并不清楚。我知道当调用该函数时,下一条指令的地址被压入堆栈。但是什么内容被转移到%bx?

1 个答案:

答案 0 :(得分:0)

函数的返回地址。 代码将esp指向的值(偏移0)移动到ebx。这是返回地址。它允许pic代码在x86中工作,并用于生成函数地址,例如

call ebx+2000 ;;  call printf

esp的值不会通过读取来修改