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保存在堆栈的栈顶,以便于回溯

posted @ 2021-12-04 19:25  Ensoleile  阅读(59)  评论(0编辑  收藏  举报