• OpenEuler中C语言中的函数调用测试


    20191218 2021-2022-1-diocs-OpenEuler中C语言中的函数调用测试

    在X86_64架构下实践2.4中的内容

    环境:Kali Linux Debian 10.x 64
    1. 32位GCC中的运行时堆栈使用情况

    • 编写main.c、sub.c

    • 编译运行

    • 使用gcc -m32 -g src/main.c src/sub.c -o test指令产生32位汇编,然后使用gdb test指令进入gdb调试器

    • 在main函数处设置断点,run

    • disass(disassemble)

    • i(info) r(registers)

      观察信息,可知在地址0x0x565561ce0x565561d1u和v被压入栈中

      于是u和v在栈中的地址为

      2. longjump

    • 编写代码,并编译运行

    • 运行结果

    • 分析堆栈变化
      生成调试文件

      进入gdb,设置断点并运行

    • diass

    • i r

    3. 64位GCC中的运行时堆栈使用情况

    • 生成64位t.s汇编文件

    • 查看堆栈变化
      生成调试文件

      disass和i r


    • arm64架构逻辑框图

    ARM64平台上的栈帧寄存器是FP,它记录的是一个函数执行过程中的栈顶(FP=SP),并且把父函数的FP保存在堆栈的栈顶,以便于回溯

  • 相关阅读:
    C系统,操作符和词法元素
    值类型和引用类型
    WPF
    C#版本进化
    快速排序
    C语言字符串
    查找
    简单快速排序
    PHP运行出现Notice : Use of undefined constant 的解决办法
    vs2010 修改注释模板
  • 原文地址:https://www.cnblogs.com/20191218tangqiheng/p/15642989.html
Copyright © 2020-2023  润新知