我正在做一些装配练习,并想出了一个我无法解决的问题。他们告诉我%esp = 0x08c28f6a。 然后他们告诉我有一个功能:
功能:movw 0(%esp),%bx;
....
保留
0x80482ae:call funct;
0x80484a4:XXXXXXX;
我不明白调用函数后%esp和%bx的值是什么,0(%esp)的含义对我来说并不清楚。我知道当调用该函数时,下一条指令的地址被压入堆栈。但是什么内容被转移到%bx?
答案 0 :(得分:0)
函数的返回地址。 代码将esp指向的值(偏移0)移动到ebx。这是返回地址。它允许pic代码在x86中工作,并用于生成函数地址,例如
call ebx+2000 ;; call printf
esp的值不会通过读取来修改