zoukankan      html  css  js  c++  java
  • 操作系统是怎么工作的——函数的堆栈框架/嵌入式代码

    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)

  • 相关阅读:
    一文详解ORB-SLAM3
    模块、进程、线程回调函数的逆向
    EPT的开启与处理
    VT MSR、CR、 Exception、#PF
    VT MTF VM-Exit
    VT技术对于除零异常的拦截与派发到3号中断
    异常与中断
    KVM_SET_SREGS 64位设置错误
    SQL注入实验学习笔记
    Pwn之简单patch
  • 原文地址:https://www.cnblogs.com/boyiliushui/p/5406060.html
Copyright © 2011-2022 走看看