操作系统是怎么工作的——函数的堆栈框架/嵌入式代码

1.函数堆栈框架

1.1框架模型

image

call指令:

1)将eip中的下一条指令的地址A保存在栈顶;

2)设置eip指向被调用程序的代码处。

ret指令:将地址A恢复到eip中

这样就将函数的调用变为顺序执行的指令流。

1.2框架形成

image

初始堆栈

1)call xxx(函数),执行call时, cs : eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs : eip的值,指向xxx的入口地址。

image

cs:eip被压栈

2)进入xxx

第一条指令: pushl %ebp

image

上级函数的基地址压栈

第二条指令: movl %esp, %ebp

image

在原来堆栈的地址空间,创建了新的函数调用堆栈

函数体中的常规操作,可能会压栈、出栈
3)退出xxx

movl %ebp,%esp

popl %ebp

image

执行此命令后ebp指向原来的地址

ret

 

image

cs:eip出栈

2.嵌入式汇编

2.1格式

asm(

汇编语句模板:

输出部分:

输入部分:

破坏格式描述部分);

即格式为asm(“statements”:Output_regs:input_regs:clobbered_regs);

注:

image

2.2例子

image

注:%1,%2指输入输出部分,第一个编号为0,第二个编号为1……,因此%1代表c(寄存器ecx),%(寄存器edx)

posted on 2016-04-18 21:48  LeoSanford  阅读(456)  评论(0编辑  收藏  举报

levels of contents