C语言中__attribute((section(name)))简单示例

linux下使用readelf -S prog, 可以看到一张elf格式的表。表中以.开头的是一个一个的段。 __attribute((section(name)))的作用就是将被该属性修饰的符号都放到名为name的段中。

示例代码main.c中的_func1与_func2被__section宏修饰,最终都会被放到自定义的名为.app_init_sec段中。

#include <stdio.h>
#include <string.h>

#define __section __attribute((section(".app_init_sec")))

typedef struct init_t{
        int (*func)(void);
        char *name;
}_init_t;

_init_t __app_init_start__;
_init_t __app_init_end__;

static int func1(void)
{
        printf("call %s\n", __FUNCTION__);
        return 0;
}
_init_t _func1 __section = {func1, "func1"};


static int func2(void)
{
        printf("call %s\n", __FUNCTION__);
        return 0;
}
_init_t _func2 __section = {func2, "func2"};

int main(int argc, char **argv)
{
        _init_t *p;

        for(p = &__app_init_start__; p < &__app_init_end__; p++){
                printf("==%s\n&#
  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值