前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用LD_PRELOAD拦截共享函数库的函数调用

使用LD_PRELOAD拦截共享函数库的函数调用

作者头像
望月从良
发布2021-07-08 10:45:53
9360
发布2021-07-08 10:45:53
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

在linux系统上,程序运行时有一个特征。在程序加载前,系统会预先加载一系列库函数。如果程序运行后,它再使用动态链接库时,如果它调用链接库里面的函数名与预先加载的函数库中的某个函数名相同,那么系统会自动调用预先加载函数库中的函数。

这种机制给与我们一个劫持程序运行的入口。例如函数从某个动态加载的so链接库里调用名为function_name的函数,那么我们可以先设置一个链接库,在里面也导出一个同名函数function_name,然后使用修改系统的环境变量LD_PRELOAD,让程序在运行前先加载我们的链接库,等函数运行后它会加载相应动态链接库,并调用里面的函数function_name,结果程序执行时运行的就会变成我们自己预先设置的函数function_name,我们看一个例子:

代码语言:javascript
复制
int main(int argc, char* argv[]) {
    char* buf;
    unsigned long len;
    if (argc != 3) {
        return 1;
    }
    len = stroul(argv[1], NULL, 0);
    printf("Allocating %lu bytes\n", len);
    buf = malloc(len)
    if (buf && len > 0) {
        memset(buf, 0, len);
        strcpy(buf, argv[2]);
        printf("%s\n", buf);
        free(buf);
    }

     return 0
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档