ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-05 22:34:32  阅读:199  来源: 互联网

标签:movl cfi 函数调用 rbp eax OpenEuler C语言 edx 2.4


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

任务详情

  1. 在X86_64架构下实践2.4中的内容
  2. 通过GDB查看寄存器的内容,把教材中的图填入具体的值
  3. 把2.4的C代码在OpenEuler中重新实践一遍,绘制出ARM64的逻辑框图

任务一X86_64架构下实践2.4

操作环境: Ubuntu Kylin

2.4.1

code

#include <stdio.h>

int sub(int x,int y)
{
    int u,v;
    u = 4;v = 5;
    return x+y+u+v;
}

int main()
{
    int a,b,c;
    a = 1;b = 2;c = 3;
    c = sub(a,b);
    printf("c = %d\n",c);
}

code.s

sub:
.LFB0:
        .cfi_startproc
        endbr64
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        movl    %edi, -20(%rbp)
        movl    %esi, -24(%rbp)
        movl    $4, -8(%rbp)
        movl    $5, -4(%rbp)
        movl    -20(%rbp), %edx
        movl    -24(%rbp), %eax
        addl    %eax, %edx
        movl    -8(%rbp), %eax
        addl    %eax, %edx
        movl    -4(%rbp), %eax
        addl    %edx, %eax
        popq    %rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE0:
        .size   sub, .-sub
        .section        .rodata
.LC0:
        .string "c = %d\n"
        .text
        .globl  main
        .type   main, @function
main:
.LFB1:
        .cfi_startproc
        endbr64
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $16, %rsp
        movl    $1, -12(%rbp)
        movl    $2, -8(%rbp)
        movl    $3, -4(%rbp)
        movl    -8(%rbp), %edx
        movl    -12(%rbp), %eax
        movl    %edx, %esi
        movl    %eax, %edi
        call    sub
        movl    %eax, -4(%rbp)
        movl    -4(%rbp), %eax
        movl    %eax, %esi
        movl    $.LC0, %edi
        movl    $0, %eax
        call    printf
        movl    $0, %eax
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc

GDB查看寄存器内容

1

填写教材中内容

HIGH PC rbp c b a tmp pc rbp v u tmp x y LOW
.... unknown 0x0 0x3 0x2 0x1 4bytes 0x401191 0x7fffffffe240 0x5 0x4 0x1 0x2 ....

任务二arm64下实践2.4

操作环境: openeuler with arm

标签:movl,cfi,函数调用,rbp,eax,OpenEuler,C语言,edx,2.4
来源: https://www.cnblogs.com/WANGYUHAN/p/15647440.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有