zoukankan      html  css  js  c++  java
  • 2.4 OpenEuler中C语言中的函数调用测试(选做)

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

    2. 通过GDB查看寄存器的内容,把教材中的图填入具体的值

    3. 把2.4的C代码在OpenEuler中重新实践一遍,绘制出ARM64的逻辑框图

    1.32位GCC中的运行时堆栈使用情况

    main.c:

    main(){
    int a,b,c;
    a=1;b=2;c=3;
    c=sub(a,b);
    printf("c=%d\n",c);
    }
    
    sub.c
    int sub(int x,int y){
            int u,v;
            u=4;v=5;
            return x+y+u+v;
    }
    

    gcc -g main.c sub.c -o main -m32

    输入:
    b main
    run
    disassemble
    ir

    2. 通过GDB查看寄存器的内容,把教材中的图填入具体的值


    分别是 0x56556206 0x56556209
    longjump

    #include<stdio.h>
    #include<setjmp.h>
    jmp_buf env;
    int main()
    {
            int r,a=100;
            printf("call setjmp to save environmen\n");
            if((r=setjmp(env))==0){
                    A();
                    printf("normal return\n");
            }
            else
                    printf("back to main() via long jump,r=%d,a=%d",r,a);
    }
    
    int A()
    {
            printf("enter A()\n");
            B();
            printf("exit A()\n");
    
    }
    
    int B()
    {
            printf("enter B()\n");
            printf("long jump?(y|n) ");
            if(getchar()=='y')
                    longjmp(env,1234);
            printf("exit B()\n");
    }
    

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

    #include <stdio.h>
    int sub(int a, int b, int c, int d, int e, int f, int g, int h)
    {
    int u, v, w;
    u = 9;
    v = 10;
    w= 11;
    return a+g+u+v;
    }
    
    int main()
    {
    int a, b, c, d, e,f, g, h,i;
    a = 1;
    b = 2;
    c = 3;
    d = 4;
    e = 5;
    f = 6;
    g = 7;
    h = 8;
    i = sub(a,b,c,d,e,f,g,h);
    }
    

  • 相关阅读:
    C语言的特点与缺点
    C语言的特点与缺点
    HDU1234 开门人和关门人
    HDU1234 开门人和关门人
    B00014 C++实现的AC自动机
    B00014 C++实现的AC自动机
    HDU4716 A Computer Graphics Problem
    HDU4716 A Computer Graphics Problem
    I00029 C语言程序-打印九九乘法表
    I00029 C语言程序-打印九九乘法表
  • 原文地址:https://www.cnblogs.com/20191301lhq/p/15647219.html
Copyright © 2011-2022 走看看