zoukankan      html  css  js  c++  java
  • c语言中函数名代表函数地址,那函数的大小(就是函数指令在内存中的字节数)怎么求

    linux下为例,适用gcc编译一个名为test.c的文件,文件里面有个函数定义void test(void);
    #include "stdio.h"

    void test(void)
    {
    printf("test!!! ");
    }

    int main(int arg, void *args[])
    {
    test();
    return 0;
    }
    编译命令gcc -o test test.c 生成test可执行文件。
    用readelf -s test命令可以读出test文件里面的各个段的大小。
    Symbol table '.dynsym' contains 6 entries:
    Num: Value Size Type Bind Vis Ndx Name
    0: 00000000 0 NOTYPE LOCAL DEFAULT UND
    1: 00000000 401 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.0 (2)
    2: 00000000 391 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (2)
    3: 0804845c 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
    4: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
    5: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__

    Symbol table '.symtab' contains 71 entries:
    Num: Value Size Type Bind Vis Ndx Name
    0: 00000000 0 NOTYPE LOCAL DEFAULT UND
    1: 08048114 0 SECTION LOCAL DEFAULT 1
    2: 08048128 0 SECTION LOCAL DEFAULT 2
    3: 08048148 0 SECTION LOCAL DEFAULT 3
    4: 08048174 0 SECTION LOCAL DEFAULT 4
    5: 080481d4 0 SECTION LOCAL DEFAULT 5
    6: 08048232 0 SECTION LOCAL DEFAULT 6
    7: 08048240 0 SECTION LOCAL DEFAULT 7
    8: 08048260 0 SECTION LOCAL DEFAULT 8
    9: 08048268 0 SECTION LOCAL DEFAULT 9
    10: 08048280 0 SECTION LOCAL DEFAULT 10
    11: 08048298 0 SECTION LOCAL DEFAULT 11
    12: 080482d8 0 SECTION LOCAL DEFAULT 12
    13: 0804843c 0 SECTION LOCAL DEFAULT 13
    14: 08048458 0 SECTION LOCAL DEFAULT 14
    15: 08048468 0 SECTION LOCAL DEFAULT 15
    16: 0804946c 0 SECTION LOCAL DEFAULT 16
    17: 08049474 0 SECTION LOCAL DEFAULT 17
    18: 0804947c 0 SECTION LOCAL DEFAULT 18
    19: 08049480 0 SECTION LOCAL DEFAULT 19
    20: 08049548 0 SECTION LOCAL DEFAULT 20
    21: 0804954c 0 SECTION LOCAL DEFAULT 21
    22: 08049564 0 SECTION LOCAL DEFAULT 22
    23: 08049570 0 SECTION LOCAL DEFAULT 23
    24: 00000000 0 SECTION LOCAL DEFAULT 24
    25: 00000000 0 SECTION LOCAL DEFAULT 25
    26: 00000000 0 SECTION LOCAL DEFAULT 26
    27: 00000000 0 SECTION LOCAL DEFAULT 27
    28: 080482fc 0 FUNC LOCAL DEFAULT 12 call_gmon_start
    29: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
    30: 0804946c 0 OBJECT LOCAL DEFAULT 16 __CTOR_LIST__
    31: 08049474 0 OBJECT LOCAL DEFAULT 17 __DTOR_LIST__
    32: 0804947c 0 OBJECT LOCAL DEFAULT 18 __JCR_LIST__
    33: 08049570 1 OBJECT LOCAL DEFAULT 23 completed.4583
    34: 0804956c 0 OBJECT LOCAL DEFAULT 22 p.4582
    35: 08048320 0 FUNC LOCAL DEFAULT 12 __do_global_dtors_aux
    36: 08048354 0 FUNC LOCAL DEFAULT 12 frame_dummy
    37: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
    38: 08049470 0 OBJECT LOCAL DEFAULT 16 __CTOR_END__
    39: 08049478 0 OBJECT LOCAL DEFAULT 17 __DTOR_END__
    40: 08048468 0 OBJECT LOCAL DEFAULT 15 __FRAME_END__
    41: 0804947c 0 OBJECT LOCAL DEFAULT 18 __JCR_END__
    42: 08048414 0 FUNC LOCAL DEFAULT 12 __do_global_ctors_aux
    43: 00000000 0 FILE LOCAL DEFAULT ABS test.c
    44: 08049480 0 OBJECT GLOBAL DEFAULT 19 _DYNAMIC
    45: 08048458 4 OBJECT GLOBAL DEFAULT 14 _fp_hw
    46: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __fini_array_end
    47: 08049568 0 OBJECT GLOBAL HIDDEN 22 __dso_handle
    48: 0804840c 5 FUNC GLOBAL DEFAULT 12 __libc_csu_fini
    49: 00000000 401 FUNC GLOBAL DEFAULT UND puts@@GLIBC_2.0
    50: 08048280 0 FUNC GLOBAL DEFAULT 10 _init
    51: 0804837c 24 FUNC GLOBAL DEFAULT 12 test
    52: 080482d8 0 FUNC GLOBAL DEFAULT 12 _start
    53: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __fini_array_start
    54: 080483bc 79 FUNC GLOBAL DEFAULT 12 __libc_csu_init
    55: 08049570 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
    56: 08048394 40 FUNC GLOBAL DEFAULT 12 main
    57: 00000000 391 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
    58: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __init_array_end
    59: 08049564 0 NOTYPE WEAK DEFAULT 22 data_start
    60: 0804843c 0 FUNC GLOBAL DEFAULT 13 _fini
    61: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __preinit_array_end
    62: 08049570 0 NOTYPE GLOBAL DEFAULT ABS _edata
    63: 0804954c 0 OBJECT GLOBAL HIDDEN 21 _GLOBAL_OFFSET_TABLE_
    64: 08049574 0 NOTYPE GLOBAL DEFAULT ABS _end
    65: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __init_array_start
    66: 0804845c 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
    67: 08049564 0 NOTYPE GLOBAL DEFAULT 22 __data_start
    68: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
    69: 0804946c 0 NOTYPE GLOBAL HIDDEN ABS __preinit_array_start
    70: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
    其中,
    51: 0804837c 24 FUNC GLOBAL DEFAULT 12 test
    这行0804837c就是test()函数的起始地址,24就是test()函数的指令静态存储空间。

  • 相关阅读:
    WML
    CocoaPods install 安装
    刷新控件,审核
    UIImageView
    课堂练习——返回一个一维整数数组中最大子数组的和
    团队与题目介绍
    学习进度条05
    软件工程结对作业02
    课堂练习——返回一个整数数组中最大子数组的和
    学习进度条04
  • 原文地址:https://www.cnblogs.com/yangchang1117/p/8351429.html
Copyright © 2011-2022 走看看